System V IPC进程间通信——消息队列
System V IPC
IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行下列操作的一组机制
- 通过信号量与其他进程进行同步
- 向其他进程发送消息或者从其他进程接收消息
- 和其他进程共享一段内存
System V IPC 最初是在一个名为“Columbus Unix” 变体中引入的,现在大部分Unix系统中都可以找到。
IPC 资源
IPC资源包括信号量、消息队列、共享内存,IPC数据结构是在请求IPC时动态创建的,每个IPC资源都是持久的,除非被进程释放,否则永远驻留在内存中,直到系统关闭。根据IPC新资源时信号量、消息队列、还是共享内存区,分别调用semget(),msgget(),shmget()函数创建IPC资源。本章详细讲一下消息队列。
消息队列
进程间通过IPC消息队列通信,进程产生的每条消息都被发送到一个IPC消息队列中,这个消息一直存放在队列中,直到另外一个进程将其读走,故消息只适用于两个进程间通信。消息是由固定大小的首部,该首部是一个long int 型,用来存放消息类型和可变长度的正文组成。
创建、获取一个消息队列-msgget()
int msgget(key_t key, int msgflg)
key : 键值,每一个消息队列都有一个键值,一般有函数ftok生成,也可以自定定义&