C minishell不会在处理SIGINT后立即返回

C minishell不会在处理SIGINT后立即返回,c,signals,sigint,C,Signals,Sigint,我正在尝试编写一个内置功能非常有限的迷你shell。然而,现在每当我处理SIGINT时,我必须再次点击enter才能输入更多的命令 void loop() { struct sigaction sa; sa.sa_handler = do_nothing; int exit_status; do { char **args; sigaction(SIGINT, &sa, NULL); my_str("

我正在尝试编写一个内置功能非常有限的迷你shell。然而,现在每当我处理SIGINT时,我必须再次点击enter才能输入更多的命令

void loop()
{
    struct sigaction sa;
    sa.sa_handler = do_nothing;
    int exit_status;
    do
    {
        char **args;
        sigaction(SIGINT, &sa, NULL);
        my_str("\nMINISHELL: ");
        my_str(current_directory);
        my_str("/ $: ");
        args = get_args();
        exit_status = execute(args);
    }
    while(exit_status);
}
void do_nothing()
{
    my_str("\nMINISHELL: ");
    my_str(current_directory);
    my_str("/ $: ");
}
我只允许使用
,以及我编写的任何方法。i、 e.
my_str()
只是一个字符串打印语句,我通过
write()
sys调用实现了它


请提供帮助。

您无法初始化整个
sigaction结构,并且您还从处理程序中调用了I/O函数。有关文档和设置SIGINT处理程序的示例,请参阅。你的教练不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查来自
sigaction
调用的返回状态。

您无法初始化整个
sigaction结构,并且您还从处理程序中调用了I/O函数。有关文档和设置SIGINT处理程序的示例,请参阅。你的教练不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查
sigaction
调用的返回状态。

我只允许使用、和,“什么?请看@jwdonahue OP的文件名带有尖括号,标记引擎将其视为(未知)HTML元素标记。我把它们修好了,这样它们才看得见。@MarkPlotnick,哦,当然!我最近才开始认真考虑经常访问这个网站。仍然习惯于界面。谢谢。“我只允许使用、、和,”什么?请看@jwdonahue OP有带尖括号的文件名,标记引擎将其视为(未知)HTML元素标记。我把它们修好了,这样它们才看得见。@MarkPlotnick,哦,当然!我最近才开始认真考虑经常访问这个网站。仍然习惯于界面。谢谢,非常感谢,这帮了大忙。现在我唯一的问题是,如果在输入任何其他命令之前运行minishell并按ctrl+c,则需要在输入其他命令之前按enter键。但是,在所有其他情况下,它都可以正常工作。再次感谢。在检测到ctrl+c后,尝试执行fflush(stdin),但不要在信号处理程序中执行。非常感谢,这非常有帮助。现在我唯一的问题是,如果在输入任何其他命令之前运行minishell并按ctrl+c,则需要在输入其他命令之前按enter键。但是,在所有其他情况下,它都可以正常工作。再次感谢。在检测到ctrl+c后,尝试执行fflush(stdin),但不要在信号处理程序中执行。