我使用一个未命名的管道进行父进程和通过fork()创建的子进程之间的进程间通信.我正在使用unistd.h中包含的pipe()函数
我假设一旦两个文件描述符都被关闭(并且在两个进程中),管道被释放/释放/销毁/等等.但我没有在手册中找到任何明确说明这一点的内容.我正在制作一个可以运行很长时间的程序,所以我想防止内存泄漏和其他类似的事情.
我的函数体看起来像:
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] );
}
是否可以安全地假设在此函数终止于子节点和父节点之后,管道已被释放/释放/销毁/等. ?
有没有明确说明这一点的文件?
谢谢
最佳答案
http://www.opengroup.org/onlinepubs/009695399/functions/close.html
原文链接:https://www.f2er.com/linux/440235.htmlWhen all file descriptors associated
with a pipe or FIFO special file are
closed,any data remaining in the pipe
or FIFO will be discarded.
实际上并没有说所有资源都被释放了,因为内部内核gubbins不是“数据留在管道中”,但我认为我们可以放心地假设如果你的内核在那之后保留了什么,这就是你内核的业务,而不是你的内核:-)