读书人

IPC讯息队列

发布时间: 2013-10-27 15:21:50 作者: rapoo

IPC——消息队列

a) 本质:消息链表 b) 分类: 1. POSIX消息队列:可移植操作系统接口 2. 系统V:随内核持续的,只有在内核重启和人工删除,才会被删除。每个消息队列对应唯一的键值 c) ...
a) 本质:消息链表

b) 分类:

1. POSIX消息队列:可移植操作系统接口

2. 系统V:随内核持续的,只有在内核重启和人工删除,才会被删除。每个消息队列对应唯一的键值

c) 获取键值:Key_t ftok(char *pathname, char proj)

1. 作用:返回文件名对应的键值,本质是个文件

2. #include<sys/types.h>, #include<sys/ipc.h>

3. Pathname:文件名

4. Proj:项目名,不为0即可

d) 获取描述字:int msgget(key_t key, int msgflg)

1. #include<sys/types.h>, #include<sys/ipc.h>,#include<sys/msg.h>

2. Key:键值,由ftok获得

3. Msgflg:标志位

a) IPC_CREAT:若没有键值对应的消息队列,创建新的消息队列

b) IPC_EXCL:与IPC_CREAT一同使用,若存在返回错误

c) IPC_NOWWAIT:无法满足时,不阻塞

4. 返回值:文件描述符msgid

e) 发送消息:int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg)

1. #include<sys/types.h>, #include<sys/ipc.h>,#include<sys/msg.h>

2. Msqid:消息队列描述符

3. Msgp:存放消息的结构:

a) struct msgbuf

b) {long mtype; 消息类型,自己定义,一个类型可以存放多条消息

c) Char mtext[1];} 消息数据首地址

4. Msgsz:长度

5. Msgflg:标志,IPC_NOWAIT:指明在消息队列没有足够空间容纳要发送的消息的时候,是否等待

f) 接收消息:int msgrcv(int msqid, struct msgbuf *msgp, int msgsz,long msgtype, int msgflg)

1. 作用:从消息队列中读取msgtype类型的消息,消息被读取之后就没有了。

2. 其它同上:

3. 消息长度:length=sizeof(struct mymsgbuf)-sizeof(long)

读书人网 >编程

热点推荐