消息队列应用
不同进程之间的点对点通信
- 不同进程之间通过各自指定的消息类型点对点通信
- 不需要经过服务器“中转”分发,由内核充当"代理人"角色
- 不同的进程可以操作一个消息队列
- 各自发送、接收自定义类型的消息,互不影响
int msgget(key_t key, int msgflg);
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
- 使用消息队列时,首先要创建一个消息队列
- 使用msgget之前首先要获取一个key值
- 获取key值的方法有三种:
- 直接给key赋一个整数值
- 直接放一个宏IPC_PRIVATE
- ftok生成一个key值
- msgflg参数
- IPC_CREAT:如果没有与指定的key对应消息队列,则创建一个
- 成功返回消息队列ID(msqid)
- 获取key值的方法有三种:
- 数据交换
-
发送数据
- msgsnd()系统调用向消息队列写入一条消息
- 参数分析
- msqid是由msgget返回的标识符ID
- 参数msgp指向用户定义的缓冲区。
- 它的第一个成员必须是一个指定消息类型的long型,后面跟着消息文本的内容。
- 第三个
-