Почему требуется stderr?

  $ tty
  /dev/tty0

На

      $cat 

в пользовательском пространстве процесс cat ожидает на своем стандартном вводе ввода данных из файла / dev / tty0.

При перечислении несуществующего файла fff,

  ls /fff > file1
   ls cannot find file :file1 Access denied

Несмотря на перенаправление stdout в file1 вместо / dev / tty0, ошибка о том, что файл не существует, будет отображаться на / dev / tty0 через дескриптор файла stderr.


Вопрос:

Если stderr записывает в / dev / tty0 аналогично stdout, какова цель stderr?

В чем заключалась идея, UNIX / Linux поддерживает еще один файловый дескриптор stderr для записи ошибки в / dev / tty0?

-1
07.05.2017, 07:58
2 ответа

Ожидается, что stdoout будет открыт в состоянии только для записи для каждого процесса unix с момента запуска, stdin — только для чтения (как я думаю) и stderr как неблокирующее чтение/запись развертывание - максимум - линейный выходной буфер.

stderr в первую очередь предназначен для немедленной передачи вывода потребителю, и на него в значительной степени полагаются в терминальных приложениях с пользовательским интерфейсом; посмотрите еще.

-3
28.01.2020, 05:14

Нам нужен STDERR (файловый дескриптор 2), чтобы отделить выходной поток (STDOUT, файловый дескриптор 1) от потока ошибок.

Без разделения нельзя отличить правильные выходные данные от ошибок.

Как вы можете видеть в вашем случае, оба потока подключены к терминалу, и вы можете легко различать их или работать с ними (dup(2) и др.) с помощью простых операций с файловыми дескрипторами из пользовательское пространство.

Просто пример отправки STDOUT в файл и STDERR в другой файл:

my_command >stdout.log 2>stderr.log
2
28.01.2020, 05:14

Теги

Похожие вопросы