конечно.

отяжении всех моих лет работы программистом на Си меня всегда смущали стандартные дескрипторы потоковых файлов. Некоторые места, такие как Википедия[1], сказать:

На языке программирования C стандартные потоки ввода, вывода и ошибок присоединяются к существующим файловым дескрипторам Unix 0, 1 и 2 соответственно.

Это подтверждаетсяunistd.h:

/* Standard file descriptors.  */
#define STDIN_FILENO    0       /* Standard input.  */
#define STDOUT_FILENO   1       /* Standard output.  */
#define STDERR_FILENO   2       /* Standard error output.  */

Тем не менее, этот код (в любой системе):

write(0, "Hello, World!\n", 14);

Будет печататьHello, World! (и перевод строки) наSTDOUT, Это странно, потому чтоSTDOUTдескриптор файла должен быть равен 1.write-для файлового дескриптора 1 также выводится наSTDOUT.

Выполнениеioctl по дескриптору файла 0 меняет стандартный ввод[2], а в файловом дескрипторе 1 изменяется стандартный вывод. Тем не менее, выполняяtermios функции на 0 или 1 меняет стандартный ввод[3][4].

Я очень озадачен поведением файловых дескрипторов 1 и 0. Кто-нибудь знает почему:

writeв 1 или 0 пишет в стандартный вывод?Выполнениеioctl на 1 изменяет стандартный вывод и на 0 изменяет стандартный ввод, но выполняяtcsetattr/tcgetattr на 1 или 0 работает для стандартного ввода?

Ответы на вопрос(0)

Ваш ответ на вопрос