执行C程序直到Ctrl + C命中终端

时间:2010-07-06 19:48:16

标签: c linux terminal

我正在编写一个程序,该程序会重复执行操作,直到Linux终端中的用户点击Ctrl + C.我在C编程。任何想法如何实现这一点。

我已经通过使用带条件的“for”循环测试了我的程序,但现在只要用户点击Ctrl + C并中断,我就想让它运行。

我在想的是编写一个do while循环,如下所示

做{    / 计算 / } while(Ctrl + C未命中)

但我不知道如何检查用户的Ctrl + C输入。

任何建议都将受到赞赏。

由于

3 个答案:

答案 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时,程序将中止。