是否可以检测用户是否只是在stdin中输入任何内容?
man select
说:
select()和pselect()允许程序监视多个文件 描述符,等待一个或多个文件描述符变为 "准备"对于某类I / O操作(例如,输入可能)。
我猜"准备好"表示EOF或NL。但是单个角色怎么样?你能用C编程一个定时器回调,它在用户空闲几秒后启动吗?如果是,怎么样?
答案 0 :(得分:2)
是的,这是可能的,但您必须将终端设置为字符模式。默认情况下,程序通常以行模式启动,在此模式下,程序在输入整行之前不会收到输入通知。
您应该使用类似 ncurses 的库将终端设置为字符模式,例如
initscr();
cbreak();
现在,如果您select()
标准输入,系统会通知您输入的每个字符,您可以使用getch()
检索这些字符。
有关详细信息,NCURSES Programming HowTo可能会有所帮助。
根据OP的要求编辑:
如果您只需要支持linux,则可以在终端配置中设置适当的选项。
首先,读入当前参数:
struct termios config;
tcgetattr(0, &config);
然后,关闭规范(线路模式):
config.c_lflag &= ~ICANON;
并指定单个字符足以从read:
返回config.c_cc[VMIN] = 1;
最后,在stdin终端上设置这些参数:
tcsetattr(0, TCSANOW, &config);
现在,read()
应该返回单个字符读取。