我知道子进程与fork()调用之前的父进程具有完全相同的文件描述符表副本。假设我只是fork()调用之前打开一个管道,如果在fork()之后使用execv(),子进程是否可以访问pipe?
pipe(fd[2*i]);
pipe(fd[2*i+1]);
pid = fork();
if(pid)
{
strcpy(_args[0], "child");
sprintf(_args[1], "%d", fd[2*i][0]);
sprintf(_args[2], "%d", fd[2*i+1][1]);
_args[4] = NULL;
if(execv(_args[0], _args) == -1) printf("execv error\n");
}
假设孩子是我的孩子的过程,这是整个父和子进程使用管道的合法途径? (这是我的代码的实际部分)。
我的程序在执行时'冻结',当我使用SIGTSTP时,我得到/sysdeps/nptl/fork.c - 没有这样的文件或目录。父母和孩子都在同一个目录中。这里有什么问题?
那是*伪代码*?因为如果你用'fd'调用['pipe'](http://man7.org/linux/man-pages/man2/pipe.2.html),然后使用'fd'作为数组的数组,工作得很好。 –
您通常也会关闭每个进程中未使用的文件描述符。 –
@JoachimPileborg编辑了代码区域。我盲目地复制了我的部分代码,没有意识到它会造成混淆。 – devonoober