Linux下system函数

本文详细介绍了在Linux C编程中,如何使用system函数和exec系列函数来调用另一个可执行文件或命令。system函数通过调用/bin/sh-c执行命令,而exec则直接替换当前进程映像。文章还讲解了system函数的返回值及其含义,以及使用system而非直接使用fork和exec的优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux C编程中,调用另一个可执行文件调用命令可以使用system函数和exec系列的函数。

 

system在程序中执行一个命令字符串很方便,在man system的时候,可以看到

#include <stdlib.h>

int system(const char *command);

 

system()通过调用/bin/sh -c命令执行命令中指定的命令,并在命令完成后返回。在执行命令期间,SIGCHLD将被阻塞,SIGINT和SIGQUIT将被忽略。
阻塞:就是忙完再说
忽略:收到了但是没有任何动作

比如在当前路径下,存在一个名为 a.out 的可执行文件,那么在一个进程main中使用system来执行这个a.out的程序,则可以直接使用

sysRet = system("./a.out");

system是在其实现中调用了fork + exec + waitpid, 执行完毕之后,回到原先的程序中去。继续执行下面的部分。

 

至于system的返回值
1、如果command是一个空指针,则仅当命令处理程序可用时,system返回非0值。可是使用这一个特性测试当前系统是否支持system函数,UNIX中总是可用的。
2、如果fork失败或者waitpid返回除EINTR之外的出错,返回-1,且设置errno。
3、如果exec失败(即不能执行shell),返回值如同shell实行了exit(127)一样。
4、如果fork,exec,waitpid都执行成功,那返回值是shell的终止状态,可以参见waitpid的说明使用system而不直接使用fork和exec的优点是:system进行了所需的各种出错的处理以及各种信号的处理

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值