Kus*_*nda 14 posix stdout stdin stderr
我给了一个问题的答案,并评论它,让我阅读的基本定义的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作为文件系统中的文件?
是否有 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
Run Code Online (Sandbox Code Playgroud)
正如其他评论者所提到的,以下问题也提供了一些有趣的信息:
| 归档时间: |
|
| 查看次数: |
2501 次 |
| 最近记录: |