使用popen替代system的原因

2021-10-07 02:04:24 字數 493 閱讀 4109

使用popen替代system的原因:

1、 system返回值複雜,子執行緒相關返回值會和命令處理返回值重合。(如果失敗,需要列印errorno)

2、 system中建立子執行緒處理cmd命令,返回sigchld訊號,系統避免殭屍程序,一般會將sigchld設定為忽略,從而主線程waitpid不到,會造成返回:no such childprogress錯誤。(可以在system前signal:sig_dfl,system後再signal回去避免報錯)

popen能夠避免這個問題,popen中使用靜態childpid陣列儲存子pid,popen返回null或file,由close來從file中獲取子pid,並waitpid**子pid。並且popen執行shell前會先逐個關閉childpid中的fd,故即使不調pclose也不會造成系統異常

另外,**裡的my_system和my_system_wait執行效果好像沒區別,因為my_system調的也是pclose,pclose中waitpid會阻塞。。

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...

system與popen函式的效率

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