![为什么需要 stderr?](https://linux22.com/image/111010/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81%20stderr%EF%BC%9F.png)
$ tty
/dev/tty0
在
$cat
在用户空间中,cat 进程等待其标准输入以接收来自 /dev/tty0 文件的输入。
在列出不存在的文件 fff 时,
ls /fff > file1
ls cannot find file :file1 Access denied
尽管将 stdout 重定向到 file1 而不是 /dev/tty0,有关文件不存在的错误将通过 stderr 文件描述符显示在 /dev/tty0 上。
问题:
如果stderr类似于stdout写入/dev/tty0,那么stderr的目的是什么?
UNIX/Linux 维护一个文件描述符 stderr 以将错误写入 /dev/tty0 背后的想法是什么?
答案1
我们需要 STDERR(文件描述符 2)来将输出流(STDOUT,文件描述符 1)与错误流分开。
如果没有分离,您就无法区分有效输出和错误。
正如您在案例中所看到的,两个流都附加到终端,您可以dup(2)
通过用户空间的简单文件描述符操作轻松区分或操作它们(等)。
举个例子,将 STDOUT 发送到一个文件并将 STDERR 发送到另一个文件:
my_command >stdout.log 2>stderr.log
答案2
stdoout
预计每个 UNIX 进程从启动时就以只写状态打开,stdin
只读(如我所想),以及stderr
非阻塞读/写部署 - 最多 - 一个行输出缓冲区。
stderr
主要用于立即向消费者提供输出,并且在终端用户界面应用程序中严重依赖;看看更多。