Signal Handling in C

后端 未结 5 1864
伪装坚强ぢ
伪装坚强ぢ 2020-12-05 02:49

How can I implement signal Handling for Ctrl-C and Ctrl-D in C....So If Ctrl-C is pressed then the program will ignore and try to get the input from the user again...If Ctrl

5条回答
  •  青春惊慌失措
    2020-12-05 03:45

    Firstly, Ctrl+D is an EOF indicator which you cannot trap, when a program is waiting for input, hitting Ctrl+D signifies end of file and to expect no more input. On the other hand, using Ctrl+C to terminate a program - that is SIGINT, which can be trapped by doing this:

    #include 
    #include 
    #include 
    #include 
    
    static void signal_handler(int);
    static void cleanup(void);
    void init_signals(void);
    void panic(const char *, ...);
    
    struct sigaction sigact;
    char *progname;
    
    int main(int argc, char **argv){
        char *s;
        progname = *(argv);
        atexit(cleanup);
        init_signals();
        // do the work
        exit(0);
    }
    
    void init_signals(void){
        sigact.sa_handler = signal_handler;
        sigemptyset(&sigact.sa_mask);
        sigact.sa_flags = 0;
        sigaction(SIGINT, &sigact, (struct sigaction *)NULL);
    }
    
    static void signal_handler(int sig){
        if (sig == SIGINT) panic("Caught signal for Ctrl+C\n");
    }
    
    void panic(const char *fmt, ...){
        char buf[50];
        va_list argptr;
        va_start(argptr, fmt);
        vsprintf(buf, fmt, argptr);
        va_end(argptr);
        fprintf(stderr, buf);
        exit(-1);
    }
    
    void cleanup(void){
        sigemptyset(&sigact.sa_mask);
        /* Do any cleaning up chores here */
    }
    

提交回复
热议问题