进程间通信
1 linux下进程间通信的几种主要方式:
管道、有名管道、信号量、消息队列、信号、共享内存、socket
2 管道
#include <unistd.h>
int pipe(int fd[2]);
管道只能半双工工作,一端写一端读,两端分别用fd[0]和fd[1]描述
3 有名管道
#include <sys/types.h>
#include <sys/stat.h>
Int mknod(const char*path, mode_t mod,dev_t dev);
Int mkfifo(const char *path, mode_t mode);
4 消息队列
核心数据机构:msqid_ds
#include <sys/types.h>
#include <sys/ipc.h>
Key_t ftok(const char* pathname,int proj_id); 获取消息队列的键值
#include <sys/mag.h>
Int msgget(key_t,int msgflg);创建消息队列
Int msgsent(int msqid,struct msgbuf *msgp,size_t msgsz,int magflg);向消息队列发送消息
Int msgrcv(int msqid,struct msgbuf *msgp,size_t msgsz,long int msgtype,int msgflg);从消息队
列接收消息
Int msgctl(int msgid, int cmd, struct msqid_ds *buf);获取和设置消息队列
5 信号量
核心数据结构:semid_ds
#include <sys/sem.h>
Int semget(key_t key,int nsems,int semflg);
Int semop(int semid,struct sembuf *sops, size_t nsops);信号量的PV操作
Int semctl(int semid, int semnum,int cmd,…);信号集的控制
6 共享内存
核心数据结构:shmid_ds
#include <linux/shm.h>
Int shmget(key_t key,size_t size,int shmflg);创建共享内存区
Void* shmat(int shmid ,const void *shmadrr, int shmflg);连接操作共享内存区
Int shamdt(const void* shmaddr);进程结束使用共享内存区时,通过shmdt断开与共享内
存区的连接
Int shamctl(int shmid,int cmd,struct shmid_ds *buf);