signal() 捕捉信号

    xiaoxiao2025-09-17  22

    /**  * @file demo6.c  * @Synopsis    *  * #inclue <signal.h>  * typeof void (*sighandler_t)(int);  * sighandler_t signal(int signum,sighandler_t handler);  *   * @author MrClimb  * @version 1.1.0  * @date 2012-05-21  */ #include <stdio.h> #include <signal.h> #include <unistd.h> #include <string.h>

    #define INPUTLEN 100

    int main(int argc, char **argv) {     char input[INPUTLEN];

        void siginthandler(int);     void sigquithandler(int);          /* *************************************************************** */     /**      * @Synopsis  这里定义两个捕捉信号。      * Ctrl+C & Ctrl+'\' 两个信号键      * Ctrl+C 发送键盘输入中断      * Ctrl+'\' 发送键盘输入 退出信号      *      * @Param SIGINT      * @Param siginthandler      */     /* *************************************************************** */     signal(SIGINT,siginthandler);     signal(SIGQUIT,sigquithandler);          do{         memset(input,0,sizeof(input));         ssize_t sst = read(STDIN_FILENO,input,sizeof(input));         if(sst == -1)         {             perror("read failure!");         }         else{             printf("you input value is: %s\n",input);         }     }while(strncmp(input,"quit",4) != 0);

        return 0; } void siginthandler(int sigint) {     printf("siginthandler: %d\n",sigint);     sleep(2); } void sigquithandler(int sigquit) {     printf("sigquithandler: %d\n",sigquit);     sleep(2); } /**  *  *************result 分析*****************  *  * 当程序a.out 时  * 1:正常输入非exit,则正常输出。  * 2: 当按下 ^C 时程序并没有退出,说明这里的信号被 signal 捕捉,同时调用相应的函数打印结果  * 3: 当按下 ^'\' 同上的结果(说明不是老鼠夹)  * 4: 当连续按 ^C^C^C^C 相同信号时这里只接收一个该信号  * 5: 当连续按 ^'\'^'\'^'\' 也同上只接收一个信号  * 6: 当按 ^C^'\' or ^'\'^C 时候会出现不同结果,只处理后按的那个信号(连续不同信号,优先级处理最后一个,哪个信号  *          在后谁优先级高)  * 7: 当按hello^C 时字符并没有输出来,而是捕捉信号,打印捕捉调用的函数  *    信号与输入交替进行时会把输入给清掉  *  (糸统调用执行过程中来信号)输入阻塞过程中来信号{       清除缓冲区      }  *  *  // X信号处理过程中又来X信号处理方式{     //  忽略后来     //  等待     //  递归     // }     // X 信号处理过程中又来了Y信号处理方式{     //   先X后Y     //   先Y后X     // }

     **************************************  *  */

    转载请注明原文地址: https://ju.6miu.com/read-1302750.html
    最新回复(0)