我正在使用一個未命名的管道進行通過fork()創建的父進程和子進程之間的進程間通信。我正在使用包含在unistd.h中的pipe()函數。我假設一旦兩個文件描述符都被關閉(並且在兩個進程中),管道被釋放/釋放/銷燬/等等。但是我沒有發現任何明確說明這一點的手冊頁。我正在製作一個將運行很長時間的程序,所以我想要防止內存泄漏和其他性質的事情。一旦兩個文件描述符都關閉,Linux是否會自動釋放一個未命名的管道?
我的函數體看起來像:
int pipefds[2];
pipe(pipefds);
if (fork() == 0) {
close(pipefds[1]);
...
//Use pipefds[0]
close(pipefds[0]);
} else {
close(pipefds[0]);
...
//Use pipefds[1]
close(pipefds[1]);
}
它是安全的假設,在兒童和該管已釋放/父既此函數終結後釋放/破壞的/ etc。 ?
是否有任何文件明確說明這一點?
謝謝
謝謝!答案和Steve Jossop的回答都很好,但我接受了Steve Jessop的回答,因爲它提供了可靠來源的文檔,文檔明確提到了管道。 – pcd6623 2010-12-10 13:28:25