Question

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;
    }
Was it helpful?

Solution

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*.

OTHER TIPS

The char** argument passed in execvp() must be terminated by NULL.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top