File-Descriptors
Linux/Unix 中是否有“非標準”流?
Linux中所謂的“標準流”就是stdin、stdout、stderr。但它們必須被稱為“標準”是有原因的。有非標準流嗎?核心是否從根本上區別對待這些非標準流?
在這種情況下,“流”是程序中打開的文件。(“流”這個詞可以有其他的意思,在這裡是題外話。)
三個標準流是應該在程序啟動時已經打開的流。文件描述符 0 被稱為標準輸入,因為這是程序應該讀取使用者輸入或其預設數據輸入的地方。文件描述符 1 被稱為標準輸出,因為這是程序應該寫入其正常數據輸出的地方。文件描述符 2 被稱為標準錯誤,因為這是程序應該寫入其錯誤消息的地方。
其他文件描述符編號不是標準的,因為它們沒有預先分配的角色。它們最終會被用於程序想要的任何東西。因此可以將程序打開的任何文件稱為“非標準流”,但這會很奇怪和令人困惑:“打開的文件不是標準輸入、標準輸出或標準錯誤”實際上不需要名稱,而“非標準流”聽起來像是某些特殊類型的文件或通過非標準方法打開的文件,情況並非如此。
文件描述符 0-2 的正常角色由標準庫和某些程序授予。例如,控制台登錄程序和終端仿真器啟動 shell(或其他程序),終端在這些文件描述符上打開。C 標準庫
FILE*
為這三個標準描述符創建對象(C 稱為流)。核心中沒有特殊處理。