我在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
行的问题吗?非常感谢。
答案 0 :(得分:0)
有人可以帮我解决execl line的问题吗?
您可以通过不使用不良错误消息来帮助自己
fprintf(stderr, " Execl failed ! ");
但是更明智的事情,比如
perror("execl /home/myproj/simple.c");
这会告诉你权限被拒绝你可以在手册中查找可能的原因,找到最可能的原因:
路径或文件描述的文件不是 可执行文件。