popen()函式簡要介紹

2021-07-26 21:32:42 字數 908 閱讀 5740

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。

使用說明:由於system()函式會先執行vfork操作,會耗費比較多的記憶體,所以使用popen()函式替換它。

popen函式封裝例子:

int _popen(char *cmd)

ret= pclose(fp);

if(ret < 0)

return 1;

}

Linux Shell函式呼叫簡要介紹

初學shell的我來說,shell函式定義和我們以前的學習的函式的意義是一樣的但是在使用方法和函式的呼叫方面有些不一致,因此在學習的shell script的函式的需要了解不同點,不管是c語言還是在shell中函式的可以簡化我們的程式,提高編寫程式的效率。本文中主要的介紹shell函式的特點,希望能...

C 主函式簡要介紹

每乙個c c 程式都必須包含乙個main主函式,每個程式都是從main函式開始執行。main 函式通常由作業系統呼叫,且是唯一被作業系統顯示呼叫的函式 main函式執行完畢通常返回給作業系統乙個值。下面是乙個簡單的main函式。int main main 函式的返回值是乙個狀態指示器,作業系統一般通...

popen函式相關

用popen函式可以獲得命令的輸出資訊,可以輸入資訊來和程式互動 比如,我用7z程式壓縮了檔案,壓縮後,原檔案可以認為沒用了。應當刪掉,如果壓縮包有問題,但是原檔案又刪掉了,很顯然不行,我們應當先測試壓縮包是否正常,如果正常,就刪掉原檔案,否則,重新壓縮,那麼,用命令測試原檔案,就需要popen命令...