我知道子進程與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