C 啟動程序 重定向IO 死鎖避免

2021-05-22 12:10:56 字數 766 閱讀 5630

建立乙個cmd程序,執行乙個ping命令,**如下

這裡使用了  process.waitforexit(), 會等到process程序執行結束,並獲得輸出

startinfo的三個屬性:redirectstandardinput、redirectstandardoutput、redirectstandarderror,分別重定向了程序的輸入、輸出、錯誤,三個流,對於output和error資訊,如果沒有需要可以不重定向,因為對他們的讀取容易造成死鎖

對程序output流和error流的讀取有2種方式:同步 or 非同步

同步:如例子中**,在waitforexit之前呼叫string output = process.standardoutput.readtoend();(或者standarderror)進行讀取,只能等程序結束後才能獲取輸出資訊,且容易由於stream被填滿而發生死鎖(詳情見下面的msdn鏈結)

非同步:使用事件和委託,程序有2個事件outputdatareceived、outputdatareceived

process.outputdatareceived += (s, e) => console.writeline(e.data);

真簡潔啊  學習學習  不禁感慨  不懂的東西實在太多了  搖頭輕嘆ing

參考msdn:http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.standardoutput(vs.80).aspx

另:c#中開啟程序還有種方法,

Linux Shell之IO重定向

一 io裝置 io是指資料的 端與資料的目的端,分別稱為標準輸入 標準輸出 及標準錯誤輸出。程式不必關心裝置的問題,無論是檔案 終端 磁帶機等。在linux預設情況下,會讀取標準輸入 寫入標準輸出,並將錯誤傳遞到標準錯誤輸出。預設情況下標準輸入 輸出 錯誤都是終端。通過下面可知 cat input ...

I O重定向和管道

輸入輸出重定向和管道是程序間的一種特殊方式。unix程序使用標準的檔案描述符,0 stdin 1 stdout 2 stderr 當程序請求乙個新的檔案描述符的時候,系統核心將最低可用的檔案描述符給它。通常情況下這三個檔案描述符是開啟著的。一 i o重定向 在linux中,我們通過shell與系統互...

Linux 基本I O重定向

在我們設定定時任務的時候經常會使用標準輸出和標準錯誤輸出。這個在linux是乙個非常重要的概念,而且這個很有用。程式應該有資料庫的 端 資料的目的端,以及報告問題的地方,它們被稱為標準輸入 標準輸出以及標準錯誤輸出。程式啟動的時候,預設情況下,標準輸出 輸入都會已經開啟,且已準備好供其使用。我們使用...