簡談Linux下的popen system函式

2021-09-29 21:09:13 字數 911 閱讀 6586

作用式啟動另外乙個程序去執行shell命令

呼叫popen的函式為父程序,被啟動的叫做子程序

popen()會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c來執行引數command的指令。

popen()會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返回乙個檔案指標。 隨後程序便可利用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸入裝置中

返回值:若成功則返回檔案指標,否則返回null,錯誤原因存於errno中

為了更好的理解system()函式返回值,需要了解其執行過程,實際上system()函式執行了三步操作:

1.fork乙個子程序;

2.在子程序中呼叫exec函式去執行command;

3.在父程序中呼叫wait去等待子程序結束。

對於fork失敗,system()函式返回-1。

如果exec執行成功,也即command順利執行完畢,則返回command通過exit或return返回的值。

(注意,command順利執行不代表執行成功,比如command:「rm debuglog.txt」,不管檔案存不存在該command都順利執行了)

如果exec執行失敗,也即command沒有順利執行,比如被訊號中斷,或者command命令根本不存在,system()函式返回127.

如果command為null,則system()函式返回非0值,一般為1.

下面是man sytem後檢視返回值的結果,證明一下

簡談vuex的理解

vuex 組成部分 1.action 2.mutation 3.state 邊外component 通過元件通過dispatch派發action 型別有兩種寫法 以載荷形式分發this.store.dispatch cart delete id 以物件形式分發 store.dispatch disp...

簡談一下時間輪(Time Wheel)

如果乙個程式設計師不知道 time wheel,那麼那個程式設計師一定不是個合格的程式設計師。timer對於作業系統還是乙個虛擬機器語言或大型中介軟體都起著重要的作用,同時timer演算法的選擇也直接影響著效能。time wheel翻譯為時間輪,是用於實現定時器timer的經典演算法,演算法細節就不...

Linux下Framebuffer驅動簡介

version v0.1 time 09 06 2008 author green waste 163.com 最近接觸了一些關於linux下framebuffer方面的東西和lcd的framebuffer驅動,所以去了解了一些相關基礎知識。為了避免其他人走我走過的彎路,所以就把我的一些很少的心得,...