我正在编写一个程序,它反复执行操作,直到Linux终端中的用户点击Ctrl + C. 我在C编程.任何想法如何实现这一点.
我已经通过使用带有条件的"for"循环测试了我的程序,但现在我想让它运行只要用户点击Ctrl + C并中断.
我在想的是编写一个do while循环,如下所示
执行{/ Computation /} while(Ctrl + C未命中)
但我不知道如何检查用户的Ctrl + C输入.
任何建议将不胜感激.
谢谢
You*_*You 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);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
Ctrl + C将向您的程序发送一个信号(SIGINT),如果您没有设置处理程序,它将导致您的程序退出.所以你要做的就是写作
do {
//computation
} while(1);
Run Code Online (Sandbox Code Playgroud)
这将做你想要的
编辑:要做你真正想要的而不需要信号处理程序,并避免做可能导致编译器优化破坏你的代码的事情,你可以这样做:
#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);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3642 次 |
| 最近记录: |