小编jul*_*n.d的帖子

Ctrl-C被getchar()吃掉

我一直在寻找解决我问题的方法很长一段时间,这就是我转向你的原因:

考虑一下这段代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

预期行为:当用户输入q然后输入时,程序退出.如果按下CTRL+ C,则由sigHandler函数捕获它,该函数将标志'done'设置为1并退出程序.

观察到的行为:getchar()调用会使用CTRL+ C字符,并且永远不会执行sigHandler函数.当CTRL+ C,然后按Enter键,则sigHandler函数被调用,程序退出.

有经验和知识的人可以帮助我吗?

感谢您的输入 :)

c unix signals getchar

4
推荐指数
3
解决办法
2115
查看次数

标签 统计

c ×1

getchar ×1

signals ×1

unix ×1