linux: 最近遇到的函数之system()和popen()

项目需求,需要在C++代码中实现shell命令,上网查了下,找到了system()和popen()两个函数可以实现。这两个函数都调用fork()产生子进程,system通过子进程调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程;popen通过子进程执行一个 shell 以运行命令来开启一个进程,这个进程必须由 pclose() 函数关闭。(popen和pclose要成对使用

返回值的问题

system(const char* string):

  如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。

popen(const char* command,const char* type):

  如果调用 fork()或pipe()失败,或者不能分配内存将返回NULL,成功返回标准 I/O流(从流中读数据相当于读取命令的标准输出)。popen 没有为内存分配失败设置 errno 值。如果调用 fork() 或 pipe() 时出现错误,errno 被设为相应的错误类型。如果 type 参数不合法,errno将返回EINVAL。

 

   

转载于:https://www.cnblogs.com/huminiceblog/p/3687980.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值