1. 程式人生 > >Unix標準輸入/輸出 (I/O) 流知識講解

Unix標準輸入/輸出 (I/O) 流知識講解

Unix標準 C 庫(因而,每個 Unix 程式)定義了三種Unix標準流:輸入、輸出和錯誤。有時將它們稱為 stdin、stdout 和 stderr,這是在所有 C 程式中用來表示它們的全域性變數。

當您在 Shell 中使用 > 操作符將程式輸出重定向到檔案時,就可以將它的Unix標準輸出 (stdout) 流傳送到這個檔案。例如:ls > this-dir 將 ls 的輸出傳送到一個名為 this-dir 的檔案。

當您在 Shell 中使用 < 操作符將程式輸入重定向到檔案時,就可以將該檔案中的內容輸入到該程式的標準輸入 (stdin) 流。例如:sort < this-dir 可以從名為 this-dir 的檔案中讀取內容,並將其作為 sort 命令的輸入。

另一個常用於重定向標準流的操作符是“|”(管道)操作符,它可以將左側程式的Unix標準輸出流連線到右側程式的標準輸入流。例如:ls | sort 和前面的兩個示例完成相同的任務,並且無需臨時檔案,ls 的輸出直接進入 sort 命令。

如果您仔細觀察,那麼可能會發現,前面的這些示例中並沒有出現標準錯誤 (stderr) 流。與Unix標準輸出流一樣,可以對 stderr 進行重定向或使用管道進行傳輸,但是您需要告訴 Shell 您希望處理 stderr 而不是 stdout。

可以使用 2> 操作符將Unix標準錯誤流重定向到檔案。在處理生成有用的錯誤輸出的命令時,您經常會看到這個操作符,比如用於編譯 Unix 程式的 make 工具:make 2> build-errors。

這個命令運行了 make,並將任何錯誤資訊傳送到 build-errors 檔案。與之類似,您可以使用 2| 將 stderr 通過管道傳遞到另一個程式。

如果您對具體的細節感興趣,那麼其他的流也有與之對應的數字,儘管很少使用到它們(0 表示標準輸入,1 表示標準輸出),除了在一個非常常見的操作符中。

在清單 1 所示的示例中,2>&1 操作符將Unix標準錯誤流連線 到Unix標準輸出流。與 > 操作符組合在一起,您可以使 stderr 和 stdout 輸出到相同的檔案中。

CODE:清單 1. 將標準錯誤流連線到標準輸出流
make > build-output 2>&1

【編輯推薦】