在我处理 SIGINT 后,C minishell 不会立即 return
C minishell does not return immediately after I handle SIGINT
我正在尝试编写一个内置功能非常有限的 minishell。但是,现在每当我处理 SIGINT 时,我都必须再次按回车键才能输入更多命令。
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("/ $: ");
}
我只能使用 <unistd.h>
、<sys/types.h>
、<signal.h>
、<unistd.h>
和 <sys/wait.h>
,以及我使用的任何方法写。即 my_str()
只是我用 write()
系统调用实现的字符串打印语句。
请帮忙。
您未能初始化整个 sigaction struct
,并且您还在处理程序中调用 I/O 函数。有关文档和设置 SIGINT 处理程序的示例,请参阅 pubs.opengroup.org。你的处理程序不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查 sigaction
调用中的 return 状态。
我正在尝试编写一个内置功能非常有限的 minishell。但是,现在每当我处理 SIGINT 时,我都必须再次按回车键才能输入更多命令。
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("/ $: ");
}
我只能使用 <unistd.h>
、<sys/types.h>
、<signal.h>
、<unistd.h>
和 <sys/wait.h>
,以及我使用的任何方法写。即 my_str()
只是我用 write()
系统调用实现的字符串打印语句。
请帮忙。
您未能初始化整个 sigaction struct
,并且您还在处理程序中调用 I/O 函数。有关文档和设置 SIGINT 处理程序的示例,请参阅 pubs.opengroup.org。你的处理程序不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查 sigaction
调用中的 return 状态。