創建新的標準流需要進行哪些更改?
希望這個問題不是太抽象,它涉及整個堆棧中的一堆軟體。
我們都知道 /dev/stdin、/dev/stdout 和 /dev/stderr。如果我想創建一個新的標準流 /dev/stdjson 怎麼辦?需要什麼軟體來支持它?我假設我不需要將文件描述符傳遞給 /dev/stdjson 給每個程序,他們可以根據需要打開該流。那麼你可以在哪裡添加一個新的標準流呢?它需要是核心模組,外殼的一部分嗎?
標準流的問題是它們被假定在程序啟動時可用,這意味著它們的文件描述符被傳遞給每個程序。(甚至允許系統在這些文件描述符上打開一些未指定的文件,否則它們會在之後保持關閉狀態
execve()
。)使這些流成為標準的另一件事是,C 執行時庫創建FILE
與標準輸入、輸出和錯誤,因此使用者程序可以立即在其上使用 egfprintf()
和其他stdio.h
功能。“設備”等與此無關,而是通過names
/dev/stdin
訪問這些文件描述符(或底層文件)的系統特定方式。如果您在 Linux 上查看 eg ,它是一個指向 的符號連結,它本身是目前程序的文件描述符 0 的魔術核心介面。沒有那個 fd open本身不會做任何事情。/dev/stdin``/proc/self/fd/0``/dev/stdin
因此,要添加新的“標準流”,您需要更改 C 庫,並且可能需要更改一些在啟動程序時特別處理 fds 0、1 和 2 的程序。
但是,如果您談論的是根據需要打開文件的程序,那聽起來與標準流有點不同。當然,您可以在允許您的程序假定存在的某個地方創建一個命名文件。但是那個文件會做什麼,如果它是一個普通的文件,一個管道還是一個套接字,取決於你實際上想要做什麼。此外,如果它特定於某個程序或程序集,則將其放置在 , 之類的東西可能
/var/lib/mytool
比放在/dev/
.