我正在使用execl()
从分叉的孩子那里运行某个程序。这就是我所拥有的:
int setup(int* arg1, int* arg2) {
int fd[2], ret, pid;
// create the pipe
ret = pipe(fd);
if (ret == -1) {
fprintf(stderr, "Pipe Failed");
exit(-1);
}
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork Failed");
exit(-1);
} else if (pid == 0) {
dup2(fd[0],0);
close(fd[0]);
close(fd[1]);
int uhoh = execl("prog", "prog", arg1, arg2, NULL);
fprintf(stderr, "%d %d\n", uhoh, getpid());
} else {
close(fd[0]);
return fd[1];
}
}
这里的目标是创建一个子项,将管道的读取端附加到它的STDIN,然后用prog
程序替换它。东西没有用,所以我在STDERR上添加了fprintf
以查看返回值是什么,它一直是-1
。
我当前的工作目录如下所示:
stuff/
main.c
main
prog.c
prog
这个execl()
电话应该有效吗?如果-1
出现问题,它会返回prog
吗?