没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
进程间通信之消息队列 msgget()、
msgsend()、msgrcv()、msgctl()
消息队列
1、消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
2、每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值
3、消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列
的读取不一定是先入先出。
4、消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个
消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限
(MSGMNI),这三个参数都可以查看:
一、什么是消息队列
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为
含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息
来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最
大长度的限制。
Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。
二、在Linux中使用消息队列
Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用
法与其他两个System V PIC机制,即信号量和共享内存相似。
1、msgget()函数
该函数用来创建和访问一个消息队列。它的原型为:
intmsgget(key_t, key, int msgflg);
与其他的IPC机制一样,程序必须提供一个键来命名某个特定的消息队列。msgflg是一个权限
标志,表示消息队列的访问权限,它与文件的访问权限一样。msgflg可以与IPC_CREAT做或操
作,表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存
在时,IPC_CREAT标志会被忽略,而只返回一个标识符。
它返回一个以key命名的消息队列的标识符(非零整数),失败时返回-1.
2、msgsnd()函数
该函数用来把消息添加到消息队列中。它的原型为:
intmsgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);
msgid是由msgget函数返回的消息队列标识符。
吹狗螺的简柏承
- 粉丝: 11
- 资源: 313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0