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

来源:互联网 发布:淘宝退款速度评价 编辑:程序博客网 时间:2024/05/01 12:46
#include <stdio.h>#include <unistd.h>#include <stdlib.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 是一个函数,可以用来查询或设置信号处理方式。//作用:1.当使用sigaction处理信号前,会临时屏蔽当前要处理的信号,当安装完成放开屏蔽。//signal 信号//signum 正负号函数//捕获处理函数 临时屏蔽当前要处理的信号void handler(int sig){    if(sig == SIGALRM){  //匹配        printf("recv sigalrm before \n");        sleep(5);        printf("recv sigalrm after\n");    }}//int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);/*struct sigaction {               void     (*sa_handler)(int);               void     (*sa_sigaction)(int, siginfo_t *, void *);               sigset_t   sa_mask;               int        sa_flags;               void     (*sa_restorer)(void);           };*///3秒发送一个定时SIGALARM信号,使用sigacton捕获处理定时信号,选择性屏蔽SIGINTint main(){    struct sigaction act;//结构体命名    act.sa_handler = handler;//指向信号处理函数    //sigemptyset用来将参数set信号集初始化并清空。    sigemptyset(&act.sa_mask);//int sigemptyset(sigset_t *set);    sigaddset(&act.sa_mask,SIGINT);//int sigaddset(sigset_t *set, int signum); ->    act.sa_flags = 0;    sigaction(SIGALRM,&act,NULL);    printf("alarm set ok\n");    alarm(3);//计时3秒    printf("------------\n");    while(1)    {        pause();//阻塞等待任意信号唤醒,pause()函数是用于将调用进程挂起直到收到信号为止。        printf("------***------\n");    }}/*$ ./a.outalarm set ok------------recv sigalrm before recv sigalrm after------***------^C*/
原创粉丝点击