1.进程间通信(IPC)概述
2.管道通信原理
2.1特点
管道中的数据读走就没了
2.2原型
Demo
3.无名管道
3.1 pipe函数
3.1.1参数说明
pipefd:存在两个元素的整型数组
3.1.2返回值
成功:0
失败:-1
Demo
3.创建命名管道(FIFO )
3.1特点
3.2 mkfifo函数
3.2.1参数说明
pathname:创建管道的路径名
mode:创建命名管道的类型(同open中的mode——0600)
3.2.2返回值
成功:0
失败:-1
Demo
4.命名管道的数据通信编程实现
4.1读操作
Demo
4.2写操作
Demo
5.消息队列
5.1特点
5.2消息队列相关API
6.消息队列编程收发数据
6.1 msgget函数
6.1.1参数说明
6.1.2返回值
成功:msgid
失败:-1
Demo
6.2 msgrcv函数
6.2.1参数说明
msgid: msgget的返回值
msgp:
先构建一个结构体,msgbuf,定义一个结构体变量,取该变量地址为参数
msgsz:消息的大小,用sizeof(结构体变量.mtext即可)
msgtyp:
msgflg:一般为0
Demo
6.2.2返回值
成功:为读取的实际字节数
失败:-1
6.3 msgsnd函数
6.3.1参数说明
msqid:msgget的返回值
msgp:要发送的结构体
msgsz:要发送的大小
msgflg:一般为0
6.3.2返回值
成功:0
失败:-1
读操作
写操作:
7.键值生成以及消息队列移除
7.1键值生成
7.1.1 ftok函数
7.1.1.1参数说明
fname:一般用当前目录
id:一般用小的整型数
7.1.1.2返回值
成功:key
失败:-1
Demo
7.2消息队列移除
一般做法:
8.共享内存概述
AB进程同时能够读取到同一块内存空间
操作方法:1.创建/打开共享内存
2.映射
3.数据交互
4.释放共享内存
5.干掉
相关API
9.共享内存编程实现
写操作
读操作
10.信号概述
11.信号编程
11.1信号处理函数的注册
11.1.1signal函数
11.1.1.1参数说明
signum参考信号表,如ctrl c为2,kill为9
handler:信号处理函数(定义一个返回值为void,参数为int类型的函数)
Demo
11.2信号处理发送函数
11.2.1 kill函数
pid:进程id
signum:signum参考信号表,如ctrl c为2,kill为9
Demo
11.3信号忽略的宏SIG_IGN
Demo
12.信号如何携带信息
12.1 sigaction函数原型
12.1.1参数说明
12.1.1.1 signum信号值
12.1.1.2 act
sigaction结构体
sa_handler函数指针:同signal中的handler函数指针
sa_sigaction函数指针:
int:signum
siginfo_t 结构体
eg:si_pid谁发的
si_int发送整型数
si_value联合体,int,char*
sa_mask:默认值为阻塞
sa_flgs:SA_SIGINFO表示能接收数据
void* :当指针为空时无数据
当指针非空时有数据
12.1.1.3 oldact:类比act
Demo
12.2信号发送函数高级版——sigqueue
12.2.1函数原型
12.2.1.1参数说明
pid:发给谁(哪个线程)
sig:发送什么信号
value:消息
sendDemo
13.信号量概述
13.1特点
13.2临界资源
13.3 API原型
13.3.1 semget函数
13.3.1.1参数说明
key:由ftok返回
num_sems:信号量集中信号量的个数
sem_flags:一般为IPC_CREAT|0666
13.3.1.2返回值
成功:信号集id
失败:-1
Demo
13.3.2 semctl函数
13.3.2.1参数说明
semid:semget的返回值
semnum:第几个信号量
cmd:指令,一般初始化为SETVAL,销毁时为IPC_RMID
第四个参数:先定义一个共用体,并初始化结构体变量中的val为1
Demo
13.3.3semop函数
semid:semget的返回值
sops:结构体数组
nsops:数组元素的个数
13.4 pv操作
13.4.1 p操作
13.4.2 v操作
Demo
Linux系统编程——进程完结