c检测用户在stdin中输入字符



是否可以检测用户是否简单地键入

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()应在单个字符上返回。

相关内容

  • 没有找到相关文章

最新更新