$ 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?
Ожидается, что stdoout
будет открыт в состоянии только для записи для каждого процесса unix с момента запуска, stdin
— только для чтения (как я думаю) и stderr
как неблокирующее чтение/запись развертывание - максимум - линейный выходной буфер.
stderr
в первую очередь предназначен для немедленной передачи вывода потребителю, и на него в значительной степени полагаются в терминальных приложениях с пользовательским интерфейсом; посмотрите еще.
Нам нужен STDERR (файловый дескриптор 2), чтобы отделить выходной поток (STDOUT, файловый дескриптор 1) от потока ошибок.
Без разделения нельзя отличить правильные выходные данные от ошибок.
Как вы можете видеть в вашем случае, оба потока подключены к терминалу, и вы можете легко различать их или работать с ними (dup(2)
и др.) с помощью простых операций с файловыми дескрипторами из пользовательское пространство.
Просто пример отправки STDOUT в файл и STDERR в другой файл:
my_command >stdout.log 2>stderr.log