linuxpopen安全實現細節1.popen建立一個管道,呼叫fork產生一個子程序,執行一個shell命令.讀取返回值時,相當於在讀取管道資料.2.popen兩個型別引數."r"讀"w",但不能同時讀寫."r"讀取shell輸出值,輸出預設/螢幕上的值."w",向shell中寫資料.即標準輸入和標準輸出.popen函式輸出流預設被全緩衝的.3.command引數是一個字串指標,指向的是一個以null結束符結尾的字串,這個字串包含一個shell命令.這個命令被送到/bin/sh以-c引數執行,即由shell來執行.4.pclose函式兩個作用.關閉檔案流和等待子程序的退出.這裡等待子程序的退出很重要.其他注意細節:1.讀取訊息時返回的最後一個字元是\n.一般shell命令輸出最後一個字元.除了是自己編寫返回的指令碼輸出.一般在讀取後加個判斷,如果為\n,替換成0.//第2點有問題,有些地方需要驗證2.程序間的執行順序問題.程序Apopen會fork出程序B,意味著某一時段內,A和B是競爭關係,可能出現B執行在A前,或者B執行在A後.表明執行的不確定性.直到pclose等待B的退出後,A繼續執行.同時表明,如果兩者存在一定依賴關係的話,可能會因為程式執行的順序問題,帶來一些麻煩.之前寫過一個程式碼曾出現過這個問題.
linuxpopen安全實現細節1.popen建立一個管道,呼叫fork產生一個子程序,執行一個shell命令.讀取返回值時,相當於在讀取管道資料.2.popen兩個型別引數."r"讀"w",但不能同時讀寫."r"讀取shell輸出值,輸出預設/螢幕上的值."w",向shell中寫資料.即標準輸入和標準輸出.popen函式輸出流預設被全緩衝的.3.command引數是一個字串指標,指向的是一個以null結束符結尾的字串,這個字串包含一個shell命令.這個命令被送到/bin/sh以-c引數執行,即由shell來執行.4.pclose函式兩個作用.關閉檔案流和等待子程序的退出.這裡等待子程序的退出很重要.其他注意細節:1.讀取訊息時返回的最後一個字元是\n.一般shell命令輸出最後一個字元.除了是自己編寫返回的指令碼輸出.一般在讀取後加個判斷,如果為\n,替換成0.//第2點有問題,有些地方需要驗證2.程序間的執行順序問題.程序Apopen會fork出程序B,意味著某一時段內,A和B是競爭關係,可能出現B執行在A前,或者B執行在A後.表明執行的不確定性.直到pclose等待B的退出後,A繼續執行.同時表明,如果兩者存在一定依賴關係的話,可能會因為程式執行的順序問題,帶來一些麻煩.之前寫過一個程式碼曾出現過這個問題.