我正在尝试创建一个能够将键击作为事件处理的小型控制台应用程序。我需要的主要是能够获得击键并能够在不处理典型的stdin读取功能的情况下使用它们。
我试图检查像mplayer这样的程序代码,它实现了这个(例如,用于停止游戏),但是我无法通过这么大的代码库找到它的核心。
由于
答案 0 :(得分:4)
你可以使用ncurses系列函数'getch',如链接所示,这里是另一个对你有帮助的link,顺便说一句,应该指出,ncurses是平台便携式的,所以如果你决定重新定位到另一个非常大的平台,那么你应该对它非常好......
答案 1 :(得分:2)
在所述应用程序的核心,您将找到select(2)
。只需将它用于stdin就可以找出何时可以从中读取输入。
答案 2 :(得分:2)
查看您是否有权访问getch()函数。使用此功能,您可以检索单个击键,甚至(CTRL +(char))击键。获得此数据后,我想您只需为此事件创建一个处理程序即可。所以你可以做的是实现索引/函数ptr对的表,使用键击作为索引,并为每个索引分配一个函数指针来处理该事件。希望这会有所帮助。
答案 3 :(得分:2)
要将stdin更改为不缓冲,直到输入被命中,你可以乱用终端i / o设置,如此...
struct termios oldopts;
struct termios newopts;
tcgetattr(fileno(stdin), &oldopts);
newopts = oldopts;
newopts.c_lflag &= (~ICANON & ~ECHO);
tcsetattr(fileno(stdin), TCSANOW, &newopts);
termios结构和tcgetattr()以及tcsetattr()原型位于termios.h文件中。
然后你可以使用select()来检查char是否准备好被读取。