標準輸入/輸出/錯誤 及I/O轉向 與 管線
|
一個程式在執行時常常需要從輸入檔讀進資料並將運算結果儲存在輸出檔中。
在Unix出現之前,傳統作業系統中,
一個程式的輸出檔與輸入檔的檔名都是寫死在程式中的,
非常難以改變。
Unix做了一個革命性的改進,除了提供傳統的輸出輸入方式之外,還額外提供
了一個方法讓使用者可以任意改變輸入輸出的標的。
Unix 定義了標準輸入檔及標準輸出檔,只要一個程式
從標準輸入檔讀進資料並將運算結果儲存在標準輸出檔中,使用者就能運用
I/O 轉向將輸入或輸出導向任意的檔案。
標準輸入檔的預設值是鍵盤,而
標準輸出檔的預設值是螢幕。
例如: 'ls'這個指令的輸出是螢幕,將一個目錄內的全部或部分檔案名稱列在螢幕上。
但如果要將'ls'這個指令的執行結果放入一個檔案,便可以用下法:
對比於我們常用的視窗系統,要將一個資料夾內的檔案名稱存入一個檔案中, 沒有方便的方法。 |
Unix 系統主動為每一個程序(Process)預設開啟三個檔案:
標準輸入(檔案代碼為 0),預設連結到鍵盤;標準輸出(檔案代碼為
1),預設連結到螢幕;標準錯誤(檔案代碼為 2),
通常也是預設連結到螢幕。
|
名稱 | 簡稱 | File Descriptor
|
|
|
|
|
| |
---|
使用者可以改變預設的連結到其他檔案。
|
|
| |||||
|
| |||||
|
| |||||
|
|
標準錯誤輸出(STDERR, standard error),
用來顯示錯誤訊息,如果標準輸出(STDOUT)已經被轉向到一個檔案去,
我們還是可以從螢幕上看到錯誤訊息。
在 Bourne Shell (sh) 及 Korn Shell (ksh) 中,
可以使用"2>"符號把它轉向到另一個檔案,
當然也可以將 STDOUT 及 STDERR合併轉向到同一檔案去。
|
合併標準輸出(STDOUT)與標準錯誤輸出(STDERR)
|
當撰寫一個電腦程式時,在除錯的過程中,
經常要將錯誤資訊儲存起來慢慢分析,如前所述可用 2>
將標準錯誤輸出(STDERR)轉向到一個檔案,如果
要合併標準輸出(STDOUT)與標準錯誤輸出(STDERR)並且存到
一個檔案時,就需用到
|