popen和system区别
来源:互联网 发布:淘宝日本签证代办 编辑:程序博客网 时间:2024/05/16 03:56
popen和system都可以执行外部命令。
popen相当于是先创建一个管道,fork,关闭管道的一端,执行exec,返回一个标准的io文件指针。
system相当于是先后调用了fork, exec,waitpid来执行外部命令
popen本身是不阻塞的,要通过标准io的读取使它阻塞
system本身就是阻塞的。
最近写的程序,要求进程在调用的外部命令运行完毕之后,再继续 向下进行。
一开始调用的popen,然后只是用了fgetc,使其阻塞,但是总是阻塞不了。原因就是如果外部命令有很多的输出内容,那fgets在得到输出的第一个字符的时候就返回了,不在阻塞了;调用fread,如果size和nitems设置的不够大,也是一样的问题。比如外部命令要输出100个字符,结果size是sizeof(char),nitems是10,那么当fread读到地10个字符的时候,就已经满足条件了,就返回了。
正确的方法是调用system,因为system最后会调用waitpid,来等待子进程运行完毕。
其实可以调用pclose来阻塞
0 0
- popen和system区别
- system和popen的用法和区别
- os.system() 和os.popen()的区别
- python os.popen()和os.system()区别
- python中的os.system()和os.popen()区别
- 使用popen和system阻塞进程的区别
- 使用popen和system阻塞进程的区别
- python中os.system、os.popen、subprocess.popen的区别
- python os.system os.popen 区别
- python os.popen与os.system区别
- python os.system os.popen 区别
- fork+exec 与system,popen区别
- python中os.popen, os.system()区别
- Python3 执行操作系统命令的函数 system 和 popen 的区别
- fopen、open和popen区别
- fopen、open和popen区别
- Linux的system()和popen()差异
- Linux的system()和popen()差异
- C rename remove fopen
- uva140 - Bandwidth
- 笔记:Deep fried convnets
- Servlet_09_ServletContext(续2)
- IOS中获取各种文件的目录路径的方法
- popen和system区别
- Android工作中用的到的好网站
- 在wpf的dataGrid中按Enter键自动跳到下一行
- hadoop-2.4.1分布式安装
- mysql存储过程参数比较
- linux设备驱动归纳总结(十):1.udev&misc
- Spring的基本用法
- Android中的5种数据存储方式
- 关于Build Active Architecture Only属性