我在试着理解
http://beej.us/guide/bgnet/examples/select.c
(以下为参考)。我正在做:
:~$ cat /etc/issue
Ubuntu 10.04 LTS \n \l
:~$ gcc
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
:~$ wget http://beej.us/guide/bgnet/examples/select.c
:~$ gcc select.c -o select
:~$ echo "ff" | ./select
A key was pressed!
:~$ ./select
TYPINGTYTimed out.
因此,select程序显然可以将一个回音管道识别为输入;但它不能识别终端上的按键。这是为什么?是否可以使用某种重定向(我猜,类似于屏幕如何将键盘输入“重定向”到串行会话),以便识别终端中的实际按键?
谢谢,
干杯!
选择C:
/*
** select.c -- a select() demo
*/
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#define STDIN 0
int main(void)
{
struct timeval tv;
fd_set readfds;
tv.tv_sec = 2;
tv.tv_usec = 500000;
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
select(STDIN+1, &readfds, NULL, NULL, &tv);
if (FD_ISSET(STDIN, &readfds))
printf("A key was pressed!\n");
else
printf("Timed out.\n");
return 0;
}
编辑:请参见答案,因此我们只需按回车键:
:~$ ./select
A key was pressed!
或者我们可以用
stty raw
(然后用
stty cooked
):
:~ stty raw
:~ ./select
dA key was pressed!
:~ stty cooked