您的位置:首页 > 其它

Summary Day34

2015-06-14 01:46 169 查看
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函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: