SystemV方案是在OS内核层面专门为进程间通信设计的一个方案,然后通过系统调用(system call)给用户提供通信接口。SystemV方案包含三种:共享内存、消息队列、信号量。
和System V 共享内存一样,OS为了管理这些消息队列,给每个消息队列配上了标识唯一性的编号msgid。消息队列中的消息则是以链表的形式被管理的。

目录
1、ftok
System V共享内存里也用到了这个函数,该函数的作用是生成一个具有唯一性的ID。这里的ID不是消息队列的ID,因为消息队列是一份临界资源,为了避免该消息队列被无关线程访问,所以设置了房间密码,ftok的返回值则是 “ 房间密码 ”。

ftok函数的第一个参数:路径名
ftok函数的第二个参数:项目ID
返回值:成功返回具有唯一性的“房间密码”;失败返回 -1
关于这个函数无需想的太复杂,简单来说就是,从路径名中取出一部分,然后再从ID中取出一部分,最后再把两部分组合一下形成一个整数,我们就把这个整数当作“房间密码”
注意:ftok被不同进程调用,只要路径名和ID是一样的,生成的整数就是一样的
2、msgget
msgget函数的作用是通过上面的得到的房间密码创建一个消息队列 或者 拿到已有消息队列的ID。

第一个参数 key:“房间密码”
第二个参数 msgflag:创建消息队列的方式,同时设置权限
返回值:成功返回消息队列id,失败返回 -1
类似于write函数的第二个参数,属于位运算输入
IPC_CREAT:可以单独使用,如果共享内存不存在,则重新开辟,函数返回值是新开辟的共享内
存的ID;如果已经存在,则沿用已有的共享内存,函数返回值是已有的共享内存的
&nb

本文详细介绍了SystemV消息队列的工作原理和技术细节,包括如何使用ftok生成唯一标识符、通过msgget创建消息队列、利用msgsnd发送消息、借助msgrcv接收消息以及运用msgctl控制消息队列。
最低0.47元/天 解锁文章
683

被折叠的 条评论
为什么被折叠?



