根据这个答案,stdin
,stdout
和stderr
最初都连接到同一个地方(与 相同/dev/tty
),读取stdin
和写入的约定stdout
和stderr
只是:约定。
在那种情况下,为什么有单独的stdin
和stdout
流,而不是将它们组合成一个?
根据这个答案,stdin
,stdout
和stderr
最初都连接到同一个地方(与 相同/dev/tty
),读取stdin
和写入的约定stdout
和stderr
只是:约定。
在那种情况下,为什么有单独的stdin
和stdout
流,而不是将它们组合成一个?
将输入流与输出流分开使程序在读取输入的同时更容易写入输出。
允许程序使用重定向或管道将其输出写入其他地方比输入来自何处更容易。
此外,除了约定之外,三个标准 I/O 流也是标准的。参见例如POSIX 标准的系统接口部分中关于标准 I/O 流的部分。
该部分的基本原理说:
标准输入、标准输出和标准错误等 FILE 指针只能包含一个底层文件描述符。因此,如果您有如下管道设置:
那么grep的stdin、stdout和stderr都有不同的fileno(),因为有两个连接的pipe()。因此也必须有不同的文件。