[从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, 一直等到有返回值,才结束返回。

猜你喜欢

转载自blog.csdn.net/bingyu880101/article/details/80227514