gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:56 26 4
gpt4 key购买 nike

我正在尝试编写一个内置功能非常有限的 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 函数。参见 pubs.opengroup.org用于文档和设置 SIGINT 处理程序的示例。你的处理程序不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查 sigaction 调用的返回状态。

关于在我处理 SIGINT 后,C minishell 不会立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com