「less」ユーティリティのコード、具体的にはキーボード入力の仕組みを見ていきます。興味深いことに、ttyin.cのライン80に、それはからの読み取りにファイル記述子を設定します。lessはキーボード入力を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標準エラー出力をファイルではありませんか?もしそうなら、WTH ?!私はキーボード入力がstdinを通して送られたと思った。ファイルのロードが完了した後
興味深いことに、あなたがls -l * | less
を行う場合でも、あなたはまだ上下にスクロールするために、キーボードを使用することができますが、あなたがls -l * | vi
をすれば、それが標準入力から読み取らないので、その後、viがあなたに叫ぶだろう。大きなアイデアは何ですか?私はstderrがスクリーンにエラーを報告する方法とキーボードから読む方法の両方であるこの奇妙な新しい土地でどうして終わりましたか?私はもうカンザスにいるとは思わない...
ところで、 'ls -l * | vim -'は、同様の魔法を実行します。 – ephemient