我正在看看'less'工具的代码,特别是它如何获得键盘输入。有趣的是,ttyin.c的80线,它设置文件描述符阅读:获取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
,然后六将在骂你,因为它不会从标准输入读取。什么是大想法?我怎么最终在这个陌生的新土地上出现了stderr既是向屏幕报告错误又从键盘读取数据的方式?我不认为我在堪萨斯州...
顺便说一句,如果你写'ls -l * | vim -',vim会执行类似的魔法。 – ephemient 2011-02-07 14:31:59