system()、popen()、fork()三个函数 的区别

本文详细介绍了system、popen和fork三个函数在执行shell命令时的不同行为。system函数会等待命令执行完成,它包括fork、exec和wait三个步骤;popen允许并行执行,需要手动调用pclose关闭,适用于需要读写进程间通信的情况;fork函数创建子进程,子进程与父进程共享资源,但拥有独立的进程ID。每个函数的返回值和使用场景也进行了阐述。
摘要由CSDN通过智能技术生成

一、system:在执行期间调用进程会一直等待shell命令执行完成。
fork :执行期间父进程等待子进程的退出码。
实际上system()函数执行了三步操作:
1.fork一个子进程;
2.在子进程中调用exec函数去执行command;
3.在父进程中调用wait去等待子进程结束。
返回值:
1>如果 exec 执行成功,即 command 顺利执行,则返回 command 通过 exit 或 return 的返回值。(注意 :command 顺利执行不代表执行成功,当参数中存在文件时,不论这个文件存不存在,command 都顺利执行)
2>如果exec执行失败,也即command没有顺利执行,比如被信号中断,或者command命令根本不存在, 返回 127
3>如果 command 为 NULL, 则 system 返回非 0 值.
4>对于fork失败,system()函数返回-1。
判断一个 system 函数调用 shell 脚本是否正常结束的方法的条件应该是
1. status != -1
2.(WIFEXITED(status) 非零且 WEXITSTATUS(status) == 0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
        int status=system("ls -l");
        if(status==-1)
                perror(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值