2

当用户按下一个键时,我试图调用一个函数,有点像用 Ctrl-C 发送信号。这个想法是做某事,说在一个while循环中,并积极地听,说,被按下的'f'键。当它被按下时,程序将停止执行循环并执行其他操作,因为按下了“f”键。

有没有办法自定义信号映射?我没有太多运气。似乎还有 1 或 2 个可用于自定义的信号,但我需要 3 个。

如果我使用 getchar(),用户需要按“f”键,然后按回车键。我希望他们只需按“f”键而不必按回车键。

这与使用 unix 程序非常相似,more用户只需按空格键即可浏览页面。

任何帮助是极大的赞赏!

4

2 回答 2

3

如果由于某种原因您不喜欢 ncurses,您可以尝试以下方法。

您可以使用一个单独的线程,该线程使用select()onstdin然后执行read()onstdin并解析用户输入;如果关键是您要查找的内容,请向您的主线程发送一个信号(即USER1或未USER2使用)。在您的信号处理程序中,执行您希望对中断执行的任何操作。请注意,这样做意味着您的代码必须是可中断的,因此中断不会中断您的计算。

于 2013-04-05T04:51:51.780 回答
3

到目前为止,最简单的选择是使用ncurses.

但是,如果这不可接受,POSIX(因此也包括 Linux)定义了一系列用于“终端控制”的例程——名称以以下开头tc并包括:

在这种情况下,您主要需要tcgetattr()tcsetattr()。您将需要研究 和 定义中的限制tcgetattr()tcsetattr()并且需要研究<termios.h>标题中的结构和标志。例如,查看ICANON本地模式:您可能希望将其关闭,以便在输入字符后立即读取字符。

于 2013-04-05T05:45:27.850 回答