使用EXCL从文件夹调用文件

使用EXCL从文件夹调用文件,c,C,我正在Linux中用C编写一个程序,它创建主进程和辅助进程,通信应该是这样的:主进程父进程接收键盘输入字符数组,然后通过管道将其传递给辅助子进程,然后,孩子们应该调用另一个.c文件,调用的execl.c文件名为simple.c,然后在第二个管道上传递结果。。。在这一点上,对于execl,我有一些问题,下面是我的子代码: if (childpid == 0) { printf("I am child!\n"); if (dup2(fd[0], STDIN_FILENO) == -1

我正在Linux中用C编写一个程序,它创建主进程和辅助进程,通信应该是这样的:主进程父进程接收键盘输入字符数组,然后通过管道将其传递给辅助子进程,然后,孩子们应该调用另一个.c文件,调用的execl.c文件名为simple.c,然后在第二个管道上传递结果。。。在这一点上,对于execl,我有一些问题,下面是我的子代码:

if (childpid == 0) {
    printf("I am child!\n");
    if (dup2(fd[0], STDIN_FILENO) == -1
        || dup2(fd2[1], STDOUT_FILENO) == -1)
        fprintf(stderr,
            "Child error: Redirection of std input/output failed!");
    else if (close(fd[0]) == -1 || close(fd[1]) == -1
         || close(fd2[0]) == -1 || close(fd2[1]) == -1)
        fprintf(stderr, "Child error: Pipes closing failed!");
    else {
        execl("/home/myproj/simple.c", " ", NULL);
        fprintf(stderr, " Execl failed ! ");
    }
    return 0;
}
简单的.c应该是这样的:

int main()
{
    // ...
    read(0, string, sizeof(string));
    string[0] = string[1];
    write(1, string, sizeof(string)); // sending new string on second pipe
    return 0;
}
谁能帮我一下execl线路有什么问题吗?非常感谢

谁能帮我一下execl线路有什么问题吗

您可以通过不使用错误消息来帮助自己

        fprintf(stderr, " Execl failed ! ");
但更明智的是,比如

        perror("execl /home/myproj/simple.c");
这会告诉您许可被拒绝,您可以在手册中查找可能的原因,找到最可能的原因:

路径或文件描述的文件不正确 可执行文件


如果没有错误。另外,除非你有一个非常奇怪的命名约定,否则你不能执行某个.c文件-你需要将你的c代码编译成可执行文件,然后可以用通常的方式运行…哦,ofc应该是可执行的,用exec调用它。我错过了那一次,非常感谢各位朋友!