我正在编写一个程序,该程序会重复执行操作,直到Linux终端中的用户点击Ctrl + C.我在C编程。任何想法如何实现这一点。
我已经通过使用带条件的“for”循环测试了我的程序,但现在只要用户点击Ctrl + C并中断,我就想让它运行。
我在想的是编写一个do while循环,如下所示
做{ / 计算 / } while(Ctrl + C未命中)
但我不知道如何检查用户的Ctrl + C输入。
任何建议都将受到赞赏。
由于
答案 0 :(得分:12)
信号陷阱比spudd86的建议更干净。不过,这个例子可以得到显着改善。
#include <signal.h>
/* ... */
int execute;
void trap(int signal){ execute = 0; }
int main() {
/* ... */
signal(SIGINT, &trap);
execute = 1;
while(execute){
/* ... */
}
signal(SIGINT, SIG_DFL);
/* ... */
}
答案 1 :(得分:6)
Ctrl + C会向程序发送一个信号(SIGINT),如果你没有设置处理程序,它将导致你的程序退出。所以你要做的就是写
do {
//computation
} while(1);
这将做你想做的事
编辑:要完成你真正想要的而不需要信号处理程序,并避免做可能导致编译器优化破坏你的代码的事情,你可以这样做:
#include <signal.h>
/* ... */
int main() {
sigset_t set, oldset;
sigemptyset(&set);
/* ... */
sigaddset(&set, SIGINT);
sigprocmask(SIG_BLOCK, &set, &oldset);
do {
sigset_t pending_set;
/* ... */
sigpending(&pending_set);
} while(!sigismember(&pending_set, SIGINT));
sigprocmask(SIG_SETMASK, &oldset, NULL);
/* ... */
}
答案 2 :(得分:0)
当按下Ctrl-C时,会向程序发送信号。默认行为是程序终止。
这意味着您可以让您的程序永远运行,无休止地循环。当用户按Ctrl-C时,程序将中止。