Reputation: 713
I am attempting to use fork/execvp to execute another program from within my C program. It is working, however before ls outputs the contents of my directory I am getting several hundred lines of:
ls: cannot access : No such file or directory
Followed by the correct listing of the files in the directory. I am passing to execvp:
char **argv = {"ls", "/home/school/"};
char *command = "ls";
For some reason when I use the path "/home/school" it cannot find the directory. Does anyone know why that is happening and why ls is saying it cannot access?
PID = fork();
i = 0;
if(i == numArgs) { doneFlag = 1; }
if (PID == 0){//child process
execvp(command, argv);//needs error checking
}
else if(PID > 0){
wait(PID, 0, 0);//wait for child process to finish execution
}
else if(PID == -1){
printf("ERROR:\n");
switch (errno){
case EAGAIN:
printf("Cannot fork process: System Process Limit Reached\n");
case ENOMEM:
printf("Cannot fork process: Out of memory\n");
}
return 1;
}
Upvotes: 1
Views: 1415
Reputation: 909
The execv and execvp functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program.
The first argument should point to the file name associated with the file being executed.
The array of pointers must be terminated by a NULL pointer. Append a 0
or NULL
at the end of argv*
.
Upvotes: 2
Reputation: 418
The char**
argument passed in execvp()
must be terminated by NULL
.
Upvotes: 2