使用EXCL从文件夹调用文件
我正在Linux中用C编写一个程序,它创建主进程和辅助进程,通信应该是这样的:主进程父进程接收键盘输入字符数组,然后通过管道将其传递给辅助子进程,然后,孩子们应该调用另一个.c文件,调用的execl.c文件名为simple.c,然后在第二个管道上传递结果。。。在这一点上,对于execl,我有一些问题,下面是我的子代码:使用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
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调用它。我错过了那一次,非常感谢各位朋友!