《Linux C编程实战》笔记:信号的发送与处理实例

本节只有代码演示和讲解。演示如何利用信号来实现数据的传递,不过在《Linux C编程实战》笔记:信号的发送-CSDN博客我已经演示过使用sigqueue发送数据了。本节是书上使用sigqueue发送数据的例子。

那么直接看代码吧,首先是发送方的程序

//选项-d后跟待传递的数据,选项-s后跟待发送的信号,选项-p后跟目的进程ID
#include
#include
#include
#include
#include
int main(int argc,char **argv){
    sigval_t value;
    //union sigval value;这两种等价,是一个数据类型
    int signum=SIGTERM;
    pid_t pid;
    int i;
    //初始化
    value.sival_int=0;
    //检查参数个数
    if(argc!=3&&argc!=5&&argc!=7){
        printf("./send_data_signo<-d data><-s signum>[-p][data]\n");
        exit(1);
    }
    //从参数中解析出信号编号,pid和传递的数据
    for(i=1;i

然后是接收方的程序

#include
#include
#include
#include
#include
void handler_sigint(int signo,siginfo_t *siginfo,void *pvoid){
    //打印数据
    printf("recv SIGINT,the data value is :%d\n",siginfo->si_int);//改成siginfo->si_value.sival_int也是可以的
}
int main(int argc,char **argv){
    //设置一下sigaction
    struct sigaction act;
    act.sa_sigaction=handler_sigint;
    act.sa_flags=SA_SIGINFO;
    sigaction(SIGINT,&act,nullptr);
    while(1);
    return 0;
}

运行结果:

你可能感兴趣的:(笔记,linux,c语言)