Posix

沒有 /dev/stdin、/dev/stdout 和 /dev/stderr 的 Unix 系統?

  • January 8, 2018

我對一個問題的回答和對它的評論讓我閱讀了基本定義的 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/stderras 文件?

是否有一個 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

正如其他評論者所提到的,以下問題也提供了一些有趣的資訊:

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