沒有 /dev/stdin、/dev/stdout 和 /dev/stderr 的 Unix 系統?
我對一個問題的回答和對它的評論讓我閱讀了基本定義的 POSIX 一致性部分,以確定是否需要
/dev/stdin
,/dev/stdout
並且/dev/stderr
實際上需要符合 POSIX 標準。事實證明它們不是:
系統可能提供非標準擴展。這些是 POSIX.1-2008 不需要的功能,可能包括但不限於:
$$ … $$具有特殊屬性的附加字元特殊文件(例如
/dev/stdin
、/dev/stdout
和/dev/stderr
)據我所知,這是標準中唯一提到這些文件的地方。
我只能訪問一個沒有實現它們的“系統”(實際上是環境),那就是 Windows 上的 MinGW(
/dev
據我所知根本沒有)。據我所知,所有免費的 Unices 都有,Cygwin、Windows 的新 Linux 環境和 Darwin/macOS 也有。不過,我對商業 Unices 並不精通。
是否有一個 POSIX 系統、Unix 或某種描述的類 Unix 環境,今天還活著,它不實現文件系統中的
/dev/stdin
、/dev/stdout
和/dev/stderr
as 文件?
是否有一個 POSIX 系統、Unix 或某種描述的類 Unix 環境,今天仍然存在,它不將 /dev/stdin、/dev/stdout 和 /dev/stderr 實現為文件系統中的文件?
是的,至少按照我下面的範例係統。
無論如何,我都不是這個系統的專家。但是,維基百科聲稱的 AIX 6.1 是:
已通過 The Open Group 的 UNIX 03 標準 ( https://en.wikipedia.org/wiki/IBM_AIX )認證的五種商業作業系統之一
在我有權訪問的安裝中似乎沒有實現那些文件描述符。如您所見,如果使用 bash,它將表現得好像它們確實存在以用於重定向:
$ uname -s AIX $ echo $SHELL /usr/bin/ksh $ ls -al /dev/stdin ls: 0653-341 The file /dev/stdin does not exist. $ ls -al /dev/stdout ls: 0653-341 The file /dev/stdout does not exist. $ ls -al /dev/stderr ls: 0653-341 The file /dev/stderr does not exist. $ echo foo >/dev/stderr The file access permissions do not allow the specified action. ksh: /dev/stderr: 0403-005 Cannot create the specified file. $ bash bash-4.2$ ls /dev/stderr ls: 0653-341 The file /dev/stderr does not exist. bash-4.2$ echo foo >/dev/stderr foo
正如其他評論者所提到的,以下問題也提供了一些有趣的資訊: