【发布时间】:2011-11-02 09:45:25
【问题描述】:
我一直在寻找解决我的问题的方法很长一段时间,这就是我求助于你的原因:
考虑这段代码:
static char done = 0;
static void sigHandler(void)
{
done = 1;
}
int user_input()
{
return (getchar() == 'q') ? 0 : 1;
}
int main(void)
{
signal(SIGTERM, sigHandler);
signal(SIGINT, sigHandler);
while (user_input() != 0 && !done)
usleep(1000);
printf("exiting\n");
return 0;
}
预期行为: 当用户输入 q 然后进入时程序退出。如果按下 CTRL+C,它会被 sigHandler 函数捕获,该函数将标志 'done' 设置为 1 并退出程序。
观察到的行为: CTRL+C 字符被 getchar() 调用吃掉,并且永远不会执行 sigHandler 函数。当CTRL+C再按回车键,调用sigHandler函数,程序退出。
有更多经验和知识的人可以帮助我吗?
感谢您的意见:)
【问题讨论】:
-
即使那是我一开始不想做的事情,我已经通过不使用标志而直接退出处理程序来解决我的问题。