POSIX 是否规定stdin
is 0、stdout
is 1 和stderr
is 2 或者这只是一个约定?其他系统是否偏离该约定,或者这是一个安全的假设?
答案1
看起来它们在 POSIX 规范中是标准化的,
-
标头应为文件流定义以下符号常量:
STDERR_FILENO
stderr的文件号; 2.STDIN_FILENO
标准输入的文件号; 0。STDOUT_FILENO
标准输出的文件号; 1.
但也
stderr
关于“ ,stdin
,stdout
- 标准 I/O 流”的 POSIX 文档状态,本卷 POSIX.1-2017 遵循 ISO C 标准。
-
三个预定义流 stdin、stdout 和 stderr 在程序启动时是无方向的。
ISO C 似乎对此相对沉默,允许内核将其想要的任何内容分配给称为STDOUT
、STDERR
和 的描述符STDIN
。但是 POSIX 文档unistd.h
明确说明了他们应该在该级别解决什么问题。
其他操作系统
答案2
Shell 命令语言的 POSIX 规范,第 2.7 节,重定向,说
用于重定向的总体格式是:
[n] 重定向操作字号码n是一个可选的十进制数字,指定文件描述符编号; …
︙
… 值 0、1 和 2 具有特殊含义和常规用途,并且由某些重定向操作隐含;他们被称为标准输入,标准输出, 和标准误, 分别。 ……︙
重定向输入的一般格式是:
[n ]<单词其中可选的n代表文件描述符号。如果省略该数字,则重定向应引用标准输入(文件描述符 0)。
…还有一个类似的段落,表示>
相当于1>
,指的是标准输出。