免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2081 | 回复: 7
打印 上一主题 下一主题

popen的一个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-05 16:59 |只看该作者 |倒序浏览
根据规范

The popen() function shall ensure that any streams from previous popen() calls that remain open in the parent process are closed in the new child process.

可是为什么要这么做呢?我觉得完全没有必要啊

我想自己搞一个pipe+fork
看了下popen的代码,对这点很不理解。。不知道为什么。。我觉得我自己写,就不用实现这个了

论坛徽章:
0
2 [报告]
发表于 2009-02-05 17:21 |只看该作者
popen()会fork一个子进程来执行,
子进程不需要使用的stream,最好把它close

论坛徽章:
0
3 [报告]
发表于 2009-02-05 17:33 |只看该作者
可是不关也没事吧。。子进程一 execl,然后退出,这些资源还是正确释放了,其实没关系,为什么一定要关呢

论坛徽章:
0
4 [报告]
发表于 2009-02-05 18:01 |只看该作者
而且,他并不是关所有的文件句柄,只是把 pipe之后fdopen 之后的句柄,关了

论坛徽章:
0
5 [报告]
发表于 2009-02-06 04:51 |只看该作者
没搞清楚情况

[ 本帖最后由 samon_fu 于 2009-2-6 19:28 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-02-06 08:57 |只看该作者
人家是:“shall ensure”,不是“must ensure”。

论坛徽章:
0
7 [报告]
发表于 2009-02-06 15:58 |只看该作者
原帖由 samon_fu 于 2009-2-6 04:51 发表


你打开一个文件后是不是也不喜欢关闭?反正程序退出了文件都关了

任何东西都是系统的资源,任何资源用了后不释放的情况都是不应该的。


你可能没搞清楚讨论的情况,

popen里面会打开一个pipe,绑定一个FILE *f,
然后vfork一个子进程,在这个子进程里面,
会把以前popen的打开的FILE * f,关掉

其实是完全没有必要的吧,因为如果popen之前,父进程通过其它方法也打开了文件,这些文件在子进程里面就没关了,也没问题
为什么要把popen打开的文件关掉呢?

论坛徽章:
0
8 [报告]
发表于 2009-02-06 15:59 |只看该作者
原帖由 ddvv 于 2009-2-6 08:57 发表
人家是:“shall ensure”,不是“must ensure”。


那段英文的意思是,要求关掉,
当然你不关,就不符合他的要求了,也没什么,就是不符合规范而已,也许还有潜在的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP