我正在编写一个程序,它反复执行一个操作,直到Ctrl+C在Linux终端中被用户击中。我正在用C语言编程,任何如何实现这一点的想法。
我已经通过使用带有条件的"for“循环来测试我的程序,但是现在我想让它运行,只要Ctrl+C被用户击中并中断。
我所想的是写一个do while循环,如下所示
同时执行{/计算/}(Ctrl+C未命中)
但是我不知道如何检查用户的Ctrl+C输入。
如有任何建议,将不胜感激。
谢谢
发布于 2010-07-06 19:54:39
信号诱捕器将比开球86的建议更清晰地发挥作用。不过,这个例子可以大大改进。
#include <signal.h>
/* ... */
int execute;
void trap(int signal){ execute = 0; }
int main() {
/* ... */
signal(SIGINT, &trap);
execute = 1;
while(execute){
/* ... */
}
signal(SIGINT, SIG_DFL);
/* ... */
}发布于 2010-07-06 19:50:37
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);
/* ... */
}发布于 2010-07-06 19:51:44
当Ctrl被击中时,会向程序发送一个信号.默认行为是终止程序。
这意味着您可以让您的程序永远运行,无休止地循环。当用户点击Ctrl时,程序将中止.
https://stackoverflow.com/questions/3189650
复制相似问题