Я просматриваю код утилиты «less», а именно, как он вводит клавиатуру. Интересно, что на линии 80 ttyin.c, он задает дескриптор файла для чтения из:Меньше получает ввод клавиатуры от stderr?
/*
* Try /dev/tty.
* If that doesn't work, use file descriptor 2,
* which in Unix is usually attached to the screen,
* but also usually lets you read from the keyboard.
*/
#if OS2
/* The __open() system call translates "/dev/tty" to "con". */
tty = __open("/dev/tty", OPEN_READ);
#else
tty = open("/dev/tty", OPEN_READ);
#endif
if (tty < 0)
tty = 2;
Не файловый дескриптор 2 STDERR? Если да, то WTH ?! Я думал, что ввод с клавиатуры был отправлен через stdin.
Интересно, что даже если вы ls -l * | less
, после того, как файл загрузится, вы можете использовать клавиатуру для прокрутки вверх и вниз, но если вы делаете ls -l * | vi
, то VI будет кричать на вас, потому что он не читает из стандартного ввода , Какая идея? Как я попал на эту странную новую землю, где stderr - это способ сообщить об ошибках на экран и прочитать с клавиатуры? Я не думаю, что я в Канзасе больше ...
BTW, если вы пишете 'ls -l * | vim -', vim будет выполнять подобную магию. – ephemient