为什么需要 stderr?

为什么需要 stderr?
  $ 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主要用于立即向消费者提供输出,并且在终端用户界面应用程序中严重依赖;看看更多。

相关内容