创建消息队列
消息队列的创建,需要用到msgget函数。
int msgget(key_t key, int msgflg); key:该参数是消息队列的唯一标识,由ftok生成。
msgflg:取值有以下几个选择:ipc_creat、ipc_excl ,这两个参数详细的作用可以man msgflg看详细介绍。
返回值:返回一个近乎唯一的message queue id
我们可以指定一个文件,调用ftok ,它会根据这个文件的 inode,生成一个近乎唯一的 key。
key_t ftok(const char *pathname, int proj_id);
pathname:文件信息,必须指定在一个存在的,可访问的文件。
proj_id:8bit的数据,0-255随意设定。
这样就可以获得一个近乎唯一的key了!
只要在这个消息队列的生命周期内,这个文件不要被删除就可以了。只要不删除,无论什么时刻,再调用 ftok,也会得到同样的 key。
综上,创建一个消息队列只需两步:
①:ftok生成一个key
②:msgget生成一个消息队列的id
如下:
int main() { int messagequeueid; key_t key; if((key = ftok(/root/messagequeue/messagequeuekey, 1)) < 0) { perror(ftok error); exit(1); } printf(message queue key: %d.n, key); if ((messagequeueid = msgget(key, ipc_creat|0777)) == -1) { perror(msgget error); exit(1); } printf(message queue id: %d.n, messagequeueid);} ftok要指定一个存在的文件,所以我们在执行之前,需要创建该文件。
查看消息队列:
system v ipc 体系有一个统一的命令行工具:ipcmk,ipcs 和 ipcrm 用于创建、查看和删除 ipc 对象。
查看创建的ipc对象:ipcs -qdong@ubuntu:~//interprocess_communication$ ipcs------ message queues --------key msqid owner perms used-bytes messages 0x01110005 0 dong 777 0 0 ------ shared memory segments --------key shmid owner perms bytes nattch status ------ semaphore arrays --------key semid owner perms nsems 发送消息
消息队列发送消息,主要调用msgsnd 函数。
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);msqid:该参数是msgget所得到的message queue 的 idmsgp:消息结构体struct msg_buffer { long mtype; char mtext[1024];};
msgsz:表示消息结构体中,mtext最大长度。
msgflg:一位掩码,可取值有:ipc_nowait、msg_copy、msg_except、msg_noerror,取值说明可见man msgsnd
接收消息
消息队列接收消息,主要调用msgrcv 函数。
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
msqid:该参数是msgget所得到的message queue 的 id
msgp:消息结构体
msgsz:可接收数据最大长度
msgflg:一位掩码,可取值有:ipc_nowait、msg_copy、msg_except、msg_noerror,取值说明可见man msgsnd
有了消息这种模型,两个进程之间的通信就像咱们平时发邮件一样,你来一封,我回一封,可以频繁沟通了。
岭纬科技推出两款Titan SL系列单线MEMS激光雷达:Titan M1-SL和Titan M1-R-SL
时代在进步:十大注定要被淘汰的安全技术
物联网电路板设计:当今的主要挑战
资深视频创作者的经验之谈:论移动固态硬盘的重要性
供货特斯拉按下快进键,宁德时代装机量有望迎来爆发
消息队列实现进程间通讯
哪个品牌充电宝质量好充电快,快充充电宝年度人气榜单
激光焊接行业的智能化选择钡铼分布式IO
新iPhone XI 过于惊艳,价格居然如此感人
教你用单片机播放生日快乐歌
陶朗亮相柏林果蔬展,聚焦人工智能
全球占比58.6%,中国可折叠手机Q2出货量120万台
HERE高精实时地图为无人驾驶车辆提供方向
说一说磁簧开关的那些特性及不同
紫光展锐将推出两款5G芯片
工业互联网支撑数字化转型面临的主要挑战
你对于人脸识别了解有多少
桌面远程连接工具哪款最好用
智能手机的接口解决方案
用户大会|星璨产品六大看点,精准定位触手可及