「less」ユーティリティのコード、特にキーボード入力の取得方法を調べています。興味深いことに、ttyin.c の 80 行目で、読み取るファイル記述子を設定します。
/*
* 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 ?! キーボード入力は標準入力を介して送信されたと思いました。
興味深いことに、ls -l * | less
ファイルのロードが完了した後でも、キーボードを使用して上下にスクロールできますがls -l * | vi
、そうすると、標準入力から読み取らないため、vi が怒鳴ります。大きなアイデアは何ですか?stderr がエラーを画面に報告する方法とキーボードから読み取る方法の両方である、この奇妙な新しい土地にどうやってたどり着いたのでしょうか? もうカンザスにはいないと思う...