加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

一旦两个文件描述符都关闭,Linux是否会自动释放未命名的管道?

发布时间:2020-12-14 02:06:56 所属栏目:Linux 来源:网络整理
导读:我使用一个未命名的管道进行父进程和通过fork()创建的子进程之间的进程间通信.我正在使用unistd.h中包含的pipe()函数 我假设一旦两个文件描述符都被关闭(并且在两个进程中),管道被释放/释放/销毁/等等.但我没有在手册中找到任何明确说明这一点的内容.我正在
我使用一个未命名的管道进行父进程和通过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

When 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不是“数据留在管道中”,但我认为我们可以放心地假设如果你的内核在那之后保留了什么,这就是你内核的业务,而不是你的内核:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读