猿问

非阻塞键盘输入

非阻塞键盘输入

我试图用C(在Linux上)编写一个循环程序,直到用户按下一个键,但不应该需要按键才能继续每个循环。

有什么简单的方法吗?我想我可以用select()但这似乎是很多工作。

或者,是否有一种方法可以捕获克特-c在程序关闭之前按下键进行清理,而不是非阻塞的io?


潇湘沐
浏览 708回答 3
3回答

回首忆惘然

select()有点太低了,太不方便了。我建议你用ncurses库将终端置于中断模式和延迟模式,然后调用getch(),它将返回ERR如果没有准备好字符:WINDOW *w = initscr();cbreak();nodelay(w, TRUE);在那个时候你可以打电话给getch没有阻塞。

呼唤远方

在UNIX系统上,可以使用sigaction注册信号处理程序的调用SIGINT表示控制+C键序列的信号。信号处理程序可以设置一个标志,该标志将在循环中签入,使其能够适当地中断。
随时随地看视频慕课网APP
我要回答