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