1

是否可以检测用户是否只是在标准输入中输入任何内容?

man select说:

select() 和 pselect() 允许程序监视多个文件描述符,等待一个或多个文件描述符“准备好”用于某种类型的 I/O 操作(例如,可能的输入)。

我猜“准备好”是指EOF或NL。但是单个字符呢?你能在 C 中编写一个定时器回调,它在用户空闲几秒钟时开始吗?如果是,如何?

4

1 回答 1

3

是的,这是可能的,但您必须将终端置于字符模式。默认情况下,程序通常以模式启动,在输入整行之前,您的程序不会收到输入通知。

您应该使用诸如ncurses 之类的库将终端置于字符模式,例如使用

initscr();
cbreak();

现在,如果select()您是标准输入,您将收到每个输入字符的通知,您可以使用getch().

有关更多详细信息,NCURSES Programming HowTo可能会有所帮助。

根据 OP 的要求进行编辑:

如果您只需要支持 linux,则可以在终端配置中设置适当的选项。

首先,读入当前参数:

struct termios config;
tcgetattr(0, &config);

然后,关闭规范(线路模式):

config.c_lflag &= ~ICANON;

并指定,一个字符足以从读取返回:

config.c_cc[VMIN] = 1;

最后,在您的标准输入终端上设置这些参数:

tcsetattr(0, TCSANOW, &config);

现在, aread()应该在读取单个字符时返回。

于 2017-11-19T21:36:14.627 回答