使用execl从文件夹调用文件

时间:2014-12-05 15:11:16

标签: c

我在Linux中用C语言编写一个程序,它创建主要和辅助进程并且通信应该是这样的:主进程(父进程)接收键盘输入(char数组)然后通过管道传递给助手(子进程)进程,然后child应该使用execl调用其他.c文件(我的.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;
}

simple.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行的问题吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

  

有人可以帮我解决execl line的问题吗?

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

        fprintf(stderr, " Execl failed ! ");

但是更明智的事情,比如

        perror("execl /home/myproj/simple.c");

这会告诉你权限被拒绝你可以在手册中查找可能的原因,找到最可能的原因:

  

路径或文件描述的文件不是                                  可执行文件。