在c中使用fork和execvp导致错误

时间:2014-04-23 16:00:08

标签: c execvp

我正在尝试使用fork / execvp从我的C程序中执行另一个程序。它正在工作,但是在ls输出我的目录的内容之前我得到几百行:

ls: cannot access : No such file or directory

后面是目录中文件的正确列表。我要去execvp:

char **argv = {"ls", "/home/school/"};
char *command = "ls";

出于某种原因,当我使用路径" / home / school"它找不到目录。有谁知道为什么会发生这种情况以及为什么ls说它无法访问?

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;
    }

2 个答案:

答案 0 :(得分:2)

char**中传递的execvp()参数必须由NULL终止。

答案 1 :(得分:2)

execv execvp 函数提供指向以null结尾的字符串<的指针数组/ b>表示新程序可用的参数列表。

第一个参数应指向与正在执行的文件关联的文件名。

指针数组必须 NULL 指针终止。在0末尾添加NULLargv*