当前位置: 技术问答>linux和unix
linux的IPC消息队列几个简单问题~~~
来源: 互联网 发布时间:2016-12-17
本文导语: 看linux IPC消息队列方面的内容,有几个疑问,读消息是根据消息的大小(testmsg函数)来判定是否读取的,那么: 问题一: 不同种类的消息,是不是双方先约定好了消息的大小,这样才能正常通讯呢? 情况一: 队...
看linux IPC消息队列方面的内容,有几个疑问,读消息是根据消息的大小(testmsg函数)来判定是否读取的,那么:
问题一:
不同种类的消息,是不是双方先约定好了消息的大小,这样才能正常通讯呢?
情况一:
队列中有三条消息,B来读的时候,假定三条都符合要求,是不是一定会先读第一条?
情况二:
A,B通讯,A发增加类消息24字节,删除类消息16字节,如果B想读删除类消息,是不是直接指定m_type为16字节,就能达到只读删除类消息的效果?
问题二:
消息队列的唯一标识是msqid,但这个假设是进程A创建,那A如何将此msqid告诉进程B,让B以此为key去读队列呢?难道是一开始,A和B都约定会以某个字符去sys_msgget一下,以得到同一个返回值msqid?
问题一:
不同种类的消息,是不是双方先约定好了消息的大小,这样才能正常通讯呢?
情况一:
队列中有三条消息,B来读的时候,假定三条都符合要求,是不是一定会先读第一条?
情况二:
A,B通讯,A发增加类消息24字节,删除类消息16字节,如果B想读删除类消息,是不是直接指定m_type为16字节,就能达到只读删除类消息的效果?
问题二:
消息队列的唯一标识是msqid,但这个假设是进程A创建,那A如何将此msqid告诉进程B,让B以此为key去读队列呢?难道是一开始,A和B都约定会以某个字符去sys_msgget一下,以得到同一个返回值msqid?
|
问题一:不用约定大小,消息是带有边界的。
情况一:B读的时候可以指定消息类型,如果不指定类型那就是读第一条
情况二:是的
问题二:A/B约定一个KEY值应该就可以了
情况一:B读的时候可以指定消息类型,如果不指定类型那就是读第一条
情况二:是的
问题二:A/B约定一个KEY值应该就可以了
|
为什么需要一个消息大小到消息类型的映射呢?
难道说同一个类型的消息,他们的大小必须都是一样的吗?不是吧
成功执行时,msgrcv()会返回接收的实际字节数。
接收者只需要分配一个足够大小的缓冲区就行了
难道说同一个类型的消息,他们的大小必须都是一样的吗?不是吧
成功执行时,msgrcv()会返回接收的实际字节数。
接收者只需要分配一个足够大小的缓冲区就行了
|
testmsg convert_mode 这些函数是什么?内核中的?
|
LINUX的东西 有很多标准位供你设置来完成不同的功能
另外我正好看APUE看到这块内容
上面说消息队列在速度方面已经没有优势, 考虑到它的一些缺点, 不建议使用
初学LINUX
仅供参考
另外我正好看APUE看到这块内容
上面说消息队列在速度方面已经没有优势, 考虑到它的一些缺点, 不建议使用
初学LINUX
仅供参考