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

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

最佳答案

execvexecvp 函数提供指向空终止字符串<的指针数组/b> 表示新程序可用的参数列表。

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

指针数组必须NULL指针结束。在 argv* 的末尾附加一个 0NULL

关于c - 在 c 中使用 fork 和 execvp 导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249620/

相关文章:

c - 将 PIN 状态作为函数参数传递

c - gdb 在使用 math.h 函数时给出奇怪的输出

c - 通过pid查找task_struct的有效方法

c - fork 后 exec 系统调用中的调度策略

c - C Shell - 如何读取和执行用户输入?

C fork 循环执行无限命令(事件文件上的 urandom/tail)

linux - Linux API 中的什么函数使用 shebang 执行脚本文件?

c - 对于这个例子,函数 my_func 是否暴露给链接器?

c - 为什么 C 不从 strtok 设置的 malloc'd char* 中释放内存?

c - 从 `forkpty` 子进程读取 : `ls/` output yields `EIO`