Linux/Unix 中是否存在“非标准”流?

use*_*834 2 standard file-descriptors open-files streams

Linux中所谓的“标准流”是stdin、stdout和stderr。它们必须被称为“标准”是有原因的。是否存在非标准流?内核是否从根本上区别对待那些非标准流?

Gil*_*il' 7

在此上下文中,\xe2\x80\x9cstream\xe2\x80\x9d 是进程中打开的文件。(单词 \xe2\x80\x9cstream\xe2\x80\x9d 可能有其他与本文无关的含义。)

\n

这三个标准流是在程序启动时应该已经打开的流。文件描述符 0 称为标准输入,因为程序应该在此处读取用户输入或其默认数据输入。文件描述符 1 称为标准输出,因为程序应该在其中写入其正常数据输出。文件描述符 2 称为标准错误,因为程序应该在其中写入错误消息。

\n

其他文件描述符编号不是标准的,因为它们没有这样的预先分配的角色。它们最终将被用于程序想要的任何用途。因此可以将程序打开的任何文件称为 \xe2\x80\x9cnonstandard stream\xe2\x80\x9d,但这会很奇怪且令人困惑: \xe2\x80\x9copen 文件不是 stdin、stdout 或 stderr\xe2\x80 \x9d 实际上并不需要名称,而 \xe2\x80\x9cnonstandard stream\xe2\x80\x9d 听起来像是某种特殊类型的文件或通过非标准方法打开的文件,但事实并非如此。

\n

文件描述符 0\xe2\x80\x932 的常规角色是由标准库和某些程序授予的。例如,控制台登录程序和终端仿真器启动 shell(或其他程序),并在这些文件描述符上打开终端。C 标准库创建FILE*为这三个标准描述符创建对象(C 称之为流)。内核中没有特殊处理。

\n