简谈Linux下的popen/system函数

popen:

作用式启动另外一个进程去执行shell命令
调用popen的函数为父进程,被启动的叫做子进程
popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。
popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。 随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中
返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中

system:

为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作:
1.fork一个子进程;
2.在子进程中调用exec函数去执行command;
3.在父进程中调用wait去等待子进程结束。
对于fork失败,system()函数返回-1。
如果exec执行成功,也即command顺利执行完毕,则返回command通过exit或return返回的值。
(注意,command顺利执行不代表执行成功,比如command:“rm debuglog.txt”,不管文件存不存在该command都顺利执行了)
如果exec执行失败,也即command没有顺利执行,比如被信号中断,或者command命令根本不存在,system()函数返回127.
如果command为NULL,则system()函数返回非0值,一般为1.

下面是man sytem后查看返回值的结果,证明一下
在这里插入图片描述

发布了149 篇原创文章 · 获赞 27 · 访问量 5043

猜你喜欢

转载自blog.csdn.net/qq_44783220/article/details/103209199