system和popen的用法

1.system

#include <stdlib.h>
int system(const char *command);

system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.
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。

2.popen

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

The popen() function opens a process by creating a pipe, forking, and invoking the shell. Since a pipe is by defini-tion unidirectional, the type argument may specify only reading or writing, not both; the resulting stream is corre-
spondingly read-only or write-only.
popen()返回值是一个普通的标准I/O流,只能用pclose()关闭,参数type可以是w或r,如果是"w",则返回的文件指针是可写的,向这个流的写入转化成对command命令的输入,如果是"r",读取一个被popen了的流,相当于读取command命令的标准输出。

references
[1] https://blog.csdn.net/sk983671939/article/details/79726854 system
[2] https://my.oschina.net/renhc/blog/54582 system报错解决
[3] http://wyq.me/blog/2014/08/11/关于linux-c中的system函数的返回值/
[4] https://blog.csdn.net/u012317833/article/details/39380041 popen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值