1. 程式人生 > >[從0到1搭嵌入式工程]對shell命令的呼叫

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