File-Descriptors

Linux/Unix 中是否有“非標準”流?

  • October 25, 2021

Linux中所謂的“標準流”就是stdin、stdout、stderr。但它們必須被稱為“標準”是有原因的。有非標準流嗎?核心是否從根本上區別對待這些非標準流?

在這種情況下,“流”是程序中打開的文件。(“流”這個詞可以有其他的意思,在這裡是題外話。)

三個標準流是應該在程序啟動時已經打開的流。文件描述符 0 被稱為標準輸入,因為這是程序應該讀取使用者輸入或其預設數據輸入的地方。文件描述符 1 被稱為標準輸出,因為這是程序應該寫入其正常數據輸出的地方。文件描述符 2 被稱為標準錯誤,因為這是程序應該寫入其錯誤消息的地方。

其他文件描述符編號不是標準的,因為它們沒有預先分配的角色。它們最終會被用於程序想要的任何東西。因此可以將程序打開的任何文件稱為“非標準流”,但這會很奇怪和令人困惑:“打開的文件不是標準輸入、標準輸出或標準錯誤”實際上不需要名稱,而“非標準流”聽起來像是某些特殊類型的文件或通過非標準方法打開的文件,情況並非如此。

文件描述符 0-2 的正常角色由標準庫和某些程序授予。例如,控制台登錄程序和終端仿真器啟動 shell(或其他程序),終端在這些文件描述符上打開。C 標準庫FILE*為這三個標準描述符創建對象(C 稱為流)。核心中沒有特殊處理。

引用自:https://unix.stackexchange.com/questions/674704