C minishell не возвращается сразу после обработки SIGINT

Я пытаюсь написать мини-оболочку с очень ограниченными встроенными функциями. Тем не менее, сейчас, когда я работаю с 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("/ $: ");
}

Мне разрешено использовать только <unistd.h>, <sys/types.h>, <signal.h>, <unistd.h>, а также <sys/wait.h>, а также любые методы, которые я пишу. т.е. my_str() это просто оператор вывода строки, который я реализовал с write() системный вызов.

ПОЖАЛУЙСТА ПОМОГИ.

1 ответ

Решение

Вы не можете инициализировать весь sigaction struct и вы также вызываете функции ввода-вывода из обработчика. См. Pubs.opengroup.org для документации и примера настройки обработчика SIGINT. Ваш обработчик не должен делать очень много. Просто установите или увеличьте флаг, на который может реагировать основной цикл вашей программы. Вы также должны проверить статус возврата из sigaction вызов.

Другие вопросы по тегам