Summary Day34

1. 信号的处理

1.1 信号集的概念和使用

信号集结构体:

typedeg struct {

unsigned ling int __val[1024 / (8 * sizeof(unsigned l))];

  } __sigset_t;

typedef __sigset_t sigset_t;

 信号集的相关处理函数

sigemptyset() => 清空

sigfillset() => 填满

sigaddset() => 增加

sigdelset() => 删除

sigismenber() => 判断信号是否存在

1.2 信号的屏蔽

(1)概念

(2)sigprocmask函数

#include <signal.h>

Int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

第一个参数:屏蔽的方式

SIG_BLOCK

SIG_UNBLOCK

SIG_SETMASK

第二个参数“新的信号集

第三个参数:旧信号集

函数功能:主要用于修改、检查屏蔽信号集


(3)sigpending函数

#include <signal.h>

int sigpending(sigset_t *set);

函数功能:

主要用于获取信号屏蔽期间来过却没有被处理的信号,将获取的信号填充到参数set中


1.3 sigaction 函数

  #include <signal.h>

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

第一个参数:信号值、信号名称

第二个参数:设置信号的新处理方式

struct sigaction {

void (*sa_handler)(int);

=>函数的指针类型,信号的处理方式一,自定义信号处理函数

=>和signal函数参数二一致,SIG_IGN,SIG_DEL函数名

void (*sa_sigaction)(int, siginfo_t *, void*);

=>函数指针,信号的处理方式二

=>是否采用该处理取决于下面的sa_flags的值

sigset_t sa_mask;

=>存放在执行信号处理函数期间需要屏蔽的信号

=>自动屏蔽与处理信号相同的信号,除非使用SA_NODEFER

int sa_mask;

=>SA_SIGINFO 表示采用第二个函数指针处理信号

=>SA_NODEFER 表示解除处理信号相同的信号屏蔽

=>SA_RESETHAND 表示信号处理函数执行后恢复默认方式

void (*sa_restorer)(void);

=>保留成员,暂时不使用,为了扩展

}

获取信号之前的处理方式

函数的功能: 主要用于获取、修改信号的处理方式


其中结构体中第二个函数指针的第二个参数类型如下:

siginfo_t

{

pid_t si_pid;

sigval si_value;

}

1.4 sigqueue函数

int sigqueue(pid_t pid, int sig, const union sigval value);

第一个参数:进程号

第二个参数:信号值

第三个参数:;联合变量,发送附加数据

函数功能:主要用于指定进程发送信号和附加数据


1.5 计时器的概念和使用


2进程间的通信

2。1概念

2.2进程间通信方式

文件、信号、管道、共享内存、消息队列、信号量集、网络

3. 使用消息队列实现进程间的通信

3.1 基本流程

(1)获取 key值,使用ftok函数

(2)创建、获取消息队列,使用msgget函数

(3)发送、接受消息队列中的消息,使用msgsnd/msgrcv函数

(4)如果不在使用,则删除消息队列,使用msgctl函数


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值