C minishell不会在处理SIGINT后立即返回
我正在尝试编写一个内置功能非常有限的迷你shell。然而,现在每当我处理SIGINT时,我必须再次点击enter才能输入更多的命令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("
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),但不要在信号处理程序中执行。