簡單說一下popen()函數
popen()函數通過建立一個管道,調用fork()産生一個子程序,執行一個shell以運作指令來開啟一個程序。這個管道必須由pclose()函數關閉,而不是fclose()函數。pclose()函數關閉标準I/O流,等待指令執行結束,然後傳回shell的終止狀态。如果shell不能被執行,則pclose()傳回的終止狀态與shell已執行exit一樣。
type參數隻能是讀或者寫中的一種,得到的傳回值(标準I/O流)也具有和type相應的隻讀或隻寫類型。如果type是"r"則檔案指針連接配接到command的标準輸出;如果type是"w"則檔案指針連接配接到command的标準輸入。
command參數是一個指向以NULL結束的shell指令字元串的指針。這行指令将被傳到bin/sh并使用-c标志,shell将執行這個指令。
popen()的傳回值是個标準I/O流,必須由pclose來終止。前面提到這個流是單向的(隻能用于讀或寫)。向這個流寫内容相當于寫入該指令的标準輸入,指令的标準輸出和調用popen()的程序相同;與之相反的,從流中讀資料相當于讀取指令的标準輸出,指令的标準輸入和調用popen()的程序相同。
如果調用fork()或pipe()失敗,或者不能配置設定記憶體将傳回NULL,否則傳回标準I/O流。popen()沒有為記憶體配置設定失敗設定errno值。如果調用fork()或pipe()時出現錯誤,errno被設為相應的錯誤類型。如果type參數不合法,errno将傳回EINVAL。
附上一個例子:
上面的那個vector<string>感覺不是很常用,是以改成一下sting版本了:
使用時候:
string str_kernel;
myexec("uname -sr",str_kernel);
cout<<str_kernel<<endl;