是否可以检测用户是否只是在stdin中键入任何内容?
man select说:
select()和pselect()允许程序监视多个文件
描述符,等待一个或多个文件描述符变为
为某类I/O操作(例如,可能的输入)做好“准备”。
我想“准备”是指EOF或NL。但是单个字符呢?你能用C语言编写一个计时器回调程序吗?它在用户空闲几秒钟后启动?如果是,怎么做?

最佳答案

是的,这是可能的,但你必须把你的终端进入字符模式。默认情况下,程序通常以行模式启动,在输入整行之前,程序不会收到输入通知。
您应该使用类似于ncurses的库将终端设置为字符模式,例如

initscr();
cbreak();

现在,如果您select()您的标准输入,您将收到每个输入字符的通知,您可以使用getch()检索这些字符。
有关更多详细信息,NCURSES Programming HowTo可能会有所帮助。
根据操作请求编辑:
如果您只需要支持linux,那么您可以在终端配置中设置适当的选项。
首先,读取当前参数:
struct termios config;
tcgetattr(0, &config);

然后,关闭canonical(线路模式):
config.c_lflag &= ~ICANON;

并指定单个字符足以从读取返回:
config.c_cc[VMIN] = 1;

最后,在stdin终端上设置以下参数:
tcsetattr(0, TCSANOW, &config);

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

10-04 21:15
查看更多