linux popen和pclose

popen函数,用来执行shell命令.已经使用了好久,但一些细节仍然需要注意.


实现细节

1.popen创建一个管道,调用fork产生一个子进程,执行一个shell命令.读取返回值时,相当于在读取管道数据.


2.popen两个类型参数."r" 读 "w",但不能同时读写."r"读取shell输出值,输出默认/屏幕上的值."w",向shell中写数据.

即标准输入和标准输出.

popen函数输出流默认被全缓冲的.


3.command 参数 是 一个 字符串指针, 指向的是一个 以 null 结束符 结尾的字符串, 这个字符串包含 一个 shell 命令. 这个命令 被送到 /bin/sh 以 -c 参数 执行, 即由 shell 来执行.


4.pclose函数两个作用.关闭文件流和等待子进程的退出.这里等待子进程的退出很重要.


其他注意细节:

1.读取消息时返回的最后一个字符是\n.一般shell命令输出最后一个字符.除了是自己编写返回的脚本输出.

一般在读取后加个判断,如果为\n,替换成0.

//第2点有问题,有些地方需要验证

2.进程间的执行顺序问题.进程A popen会fork出进程B,意味着某一时段内,A和B是竞争关系,可能出现B执行在A前,或者B执行在A后.表明执行的不确定性.直到pclose等待B的退出后,A继续执行.

同时表明,如果两者存在一定依赖关系的话,可能会因为程序执行的顺序问题,带来一些麻烦.之前写过一个代码曾出现过这个问题.


参考

http://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html

http://blog.sina.com.cn/s/blog_641926f30100trj1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值