在我的程序中,我想检测用户何时按下ctrl + a,b,c,d,e ... 每个角色都有不同的动作。我有:
int main(){
signal(SIGINT, sighandler);
while(1) {
sleep(1);
}
return(0);
}
void sighandler(int signum){
printf("Caught signal %d, coming out...\n", signum);
exit(1);
}
我想控制ctrl + chars的功能,但目前只检测ctrl + c,我怎样才能检测到其他字符呢?
答案 0 :(得分:1)
没有。 Ctrl + C 不是“控制信号”。
在POSIX系统中,终端有三个按键,导致内核发送从终端读取进程的信号: Ctrl + C 用于中断({{1} }), Ctrl + \ 用于退出(SIGINT
), Ctrl + Z 用于暂停( SIGQUIT
)。您可以使用POSIX termios接口将按键覆盖到任何 Ctrl + 键组合 - 但请记住,只有三个(信号和可能的按键) )。
更常见的是使用termios接口(或等效脚本中的SIGTSTP
命令)将终端置于原始模式,在这种情况下,应用程序获取内核或图形用户未使用的所有按键接口(为交换终端,关闭窗口等内容保留的组合键。)
最便携的方法是使用一个名为Curses的非常常见的库。最常见的实现(与普通Curses相比有一些额外的好处)是ncurses - 无需转到该链接来下载和编译源代码;该库已经打包为您的发行版,因此您可以在标准软件存储库中找到它。对于Windows,有PDCurses;使用MinGW编译器,您也可以在Windows中使用ncurses。
不要被各种版本的图书馆的年龄所欺骗(尽管如果你能利用它,我会建议使用ncurses 6); curses界面稳定,并且使用了很长时间。 Ncurses确实添加了一些有用的东西,并且仍在积极维护。