[从0到1搭嵌入式工程]对shell命令的调用

在linux的应用程序中,调用system()和popen()可以执行shell命令。

system()命令是串行执行,是阻塞的,等到shell执行结束后,返回, system不能直接返回执行结果。

popen()是平行的,不等执行完成,函数就会返回, 继续往下执行。

popen会返回一个文件指针,可以对这个文件指针进行读和写,会作用到sh中的文件中。

所以对于需要阻塞的命令,可以直接调用system(), 对于并行执行的:

FILE * pf = NULL;

pf = popen(cmd, "r");

if(NULL != pf) pclose(pf);


对于需要返回值的, popen因为自带管道,容易实现:

pf = popen(cmd, "r")

fd = fileno(pf)

while(1){

    FD_ZERO(&fdset); FD_SET(fd, &fdset);

    ret = select(1+fd, &fdset, 0, 0, timeout);

    if(FD_ISSET(fd, &fdset)) fread(result_buf, 1, len, pf);

    pclose(pf);

使用select作为一个timeout, 一直等到有返回值,才结束返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值