linux进程间通信方式之信号处理sigaction

来源:互联网 发布:ant java 参数详解 编辑:程序博客网 时间:2024/05/01 10:41
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <strings.h>#include <string.h>#include <signal.h>#include <syslog.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>//linux进程间通信方式之信号处理sigaction//sigaction 是一个函数,可以用来查询或设置信号处理方式。//作用:2.当sigaction处理的信号和信号屏蔽集合中信号同时产生时,会自动屏蔽信号集合中信号,当安装信号处理完放开屏蔽信号。//signal 信号//signum 正负号函数//捕获处理函数void  handler(int sig){    if(sig == SIGINT){ //匹配        printf("recv sigint after\n"); //接收信号后    }}//sigaction捕获处理SIGINTint main(void){    char buf[128];    struct sigaction act;//结构体命名    act.sa_handler = handler;//指向信号处理函数    act.sa_flags = SA_RESTART; //信号中断系统调用时,在内核中快速重启系统调用    //act.sa_flags = 0;    sigaction(SIGINT,&act,NULL);//屏蔽SIGINT信号,转向执行捕获处理函数    int ret =-1;    while(1){        ret = read(0,buf,127);        if(ret <0){            perror("read");            exit(1);        }        printf("buf:%s\n",buf);    }}/*$ ./a.outhellobuf:hellowooooobuf:wooooo^Crecv sigint after^Crecv sigint after^\Quit (core dumped)*/