system與popen函式的效率

2021-05-24 07:12:12 字數 791 閱讀 6194

我們在程式中希望執行shell命令的時候首先想到的system函式,這個函式很簡單,但有乙個嚴重的問題,就是他的執行方式,效率上可能不高。

#include

#include

#include

#include

#include

using namespace std;

timeval start,end;

double timeuse;

void time()

int main(int argc, char** argv)

time();

return 0;

}system函式執行結構

popen函式執行結果:

如圖所示,當使用system函式的時候對cpu的占用很大,但對記憶體的消耗很少,執行時間是14秒左右,

當使用popen的時候,對cpu的消耗很小,但記憶體的使用直線上公升,執行時間是9秒左右,速度明顯提公升。我的測試

很可能片面不準確,希望有時間再進行其他方面的比較。

/** 執行指定命令串cmd_str

* cmd_str: 命令串

* output: 命令執行結果輸出

* return: -1:failed

*                0:success

*/int execl_cmd(char *cmd_str, char *output)

while(fgets(buf, sizeof(buf), fp))

pclose(fp)

return 0;

}

system函式和popen函式

include file popen const char command,const char type int pclose file stream popen總是和pclose一起出現被使用的。popen 建立乙個管道,通過fork或者invoke乙個子程序,然後執行command。返回值在標...

system函式和popen函式

linux的system函式的實現原始碼 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c cmdstring來執行引數cmdstring字串所代表的命令,此命令執行完後隨即返回原呼叫的程序。int system const char cmdstring if pid fo...

popen函式和system函式詳解

我們先用man指令查一下popen函式 函式說明 1 popen 會呼叫fork 產生子程序,然後從子程序中呼叫 bin sh c來執行引數command的指令。2 引數type可使用 r 代表讀取,w 代表寫入。依照此type值,popen 會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返...