在C中获取键盘中断

提问

程序:

#include<stdio.h>
void main()
{
    int time=1800;
    while(1){
        system("clear");
        time-=1;
        printf("%d\n",time);
        sleep(1);
    if(time==0)
        pause();
    }
}

当时间达到0时,上述程序停止.我的要求是在程序运行期间,如果我按任意键,如空格键或任何其他键,程序暂停,再次按下键,程序恢复.所以这样做,在执行之前
在条件下,我们提交键盘中断的信号处理程序.在C中如何做到这一点.

什么是用于获得键盘中断的函数.我不想从用户那里得到输入,我想处理用户通过键盘产生的中断.

提前致谢..,

最佳答案

键盘不存在于纯标准C99或C11中(stdin不是键盘,可能是pipe(7),因此并不总是tty(4);您可能从/ dev / tty读取…).

因此,您希望它变得简单得多,而且它是特定于操作系统的.我专注于Linux.

阅读有关ttys的更多信息,特别是阅读tty demystified.请注意,tty通常处于熟模式,其中内核是缓冲行(除了stdin是行缓冲).

合理的方法是使用像ncursesreadline这样的终端库.这些库在原始模式下设置tty(您可以自己完成,参见thistermios(3);您可能还需要poll(2)).确保正常退出并在退出前将tty重置为熟食模式.

但是你的生命可能太短,不能潜入termios(3)tty_ioctl(4),所以只需使用ncurses或readline

您还可以考虑一些GUI应用程序(例如,在X11Wayland之上).然后使用工具包(GTK,Qt,…).