Как убрать ^C при вызове сигнала

Рейтинг: 1Ответов: 1Опубликовано: 15.03.2023

Есть код:

void    signal_handler(int sig)
{
    if (sig == SIGINT)
    {
        ioctl(STDIN_FILENO, TIOCSTI, "\n");
        rl_replace_line("", 0);
        rl_on_new_line();
    }
}

При нажатии на Ctrl + C вызывается сигнал и в терминал программы выводится ^C. Как можно это исправить что бы ничего не выводилось?

Ответы

▲ 1

С помощью "\b"(backspace) можно удалять символы в консоли. В контексте вопроса это можно сделать так:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void signalHandler( int sigNo ){
    
    printf( "\b\b" );// delete ^ and C
    printf( "Signal got: %i\n", sigNo );
    
}

int main( int argc, char* argv[], char* envp[] ){
    
    signal( SIGINT, signalHandler );
    pause();
    
    printf( "End of program.\n" );
    return 0;
}

Вывод в консоли:

$ ./main 
Signal got: 2
End of program.