是否可以检测用户是否简单地键入
man select
说:
select()和pselect()允许程序监视多个文件 描述符,等到一个或多个文件描述符成为 "准备"用于某些类别的I/O操作(例如,输入)。
我猜"准备就绪"是指EOF或NL。但是单个字符呢?您可以在C中编程一个计时器 - 呼叫,该计时器可以从用户闲置几秒钟开始?如果是,如何?
是的,这是可能的,但是您必须将终端放入 targe 模式中。默认情况下,程序通常以 line 模式启动,在输入整个行之前,您的程序不会通知输入。
您应该使用例如 ncurses 将您的终端模式放置在字符模式中,例如使用
initscr();
cbreak();
现在,如果您select()
您的标准输入,将为您输入的每个字符通知您,您可以使用getch()
检索。
有关更多详细信息,ncurses编程howto可能会有所帮助。
根据OP的要求进行编辑:
如果您只需要支持Linux,就可以在终端配置中设置适当的选项。
首先,在当前参数中阅读:
struct termios config;
tcgetattr(0, &config);
然后,关闭规范(线路模式):
config.c_lflag &= ~ICANON;
并指定一个字符足以从读取:
返回:config.c_cc[VMIN] = 1;
最后,将这些参数设置在您的stdin终端:
tcsetattr(0, TCSANOW, &config);
现在,read()
应在单个字符上返回。