Io
/dev/stdin、/dev/stdout 和 /dev/stderr 的可移植性如何?
有時我需要指定標準 IO 流之一的“路徑等效”(
stdin
,stdout
,stderr
)。由於我 99% 的時間都在使用 Linux,所以我只是在前面加上/dev/
get/dev/stdin
等,而這“似乎是做正確的事”。但是,一方面,我一直對這樣的理由感到不安(因為,當然,“它似乎有效”直到它不起作用)。此外,我對這種機動的便攜性沒有很好的理解。所以我有幾個問題:
- 在 Linux 的上下文中,將、和等同於 、 和 是否安全(是/
stdin
否 ) ?stdout``stderr``/dev/stdin``/dev/stdout``/dev/stderr
- 更一般地說,這種等價物是否“足夠便攜”?
我找不到任何 POSIX 參考。
早在其史前時期,它就已在 Linux 上可用。它不是POSIX,儘管如果作業系統中不存在許多實際的 shell(包括 AT&T
ksh
和bash
)會模擬它;請注意,此模擬僅適用於 shell 級別(即重定向或命令行參數,而不是 eg 的顯式參數open()
)。也就是說,它應該以一種或另一種方式在大多數/dev/fd/N
商業 Unix 系統上可用(有時它拼寫為各種 integersN
,但大多數具有此功能的系統都會像 Linux 和 *BSD 那樣提供符號連結)。