linux-----9----键值生成及消息队列移除

消息队列流程:

首先,在get进程中,
1.写一个消息队列的结构体,(这个样式是Linux提供的样板,可以就这样用),
2.创建一个用来插入消息队列的结点(结构体)。
3.索引一个消息队列,键值通过ftok函数获得,通过msgrcv函数获取这个消息队列的内容。
4.在内核中除去这个队列,以免过多消息队列出现。

在send进程中
1.写一个消息队列的结构体,(这个样式是Linux提供的样板,可以就这样用),
2.创建一个用来插入消息队列的结点(结构体)。
3.索引一个消息队列,键值通过ftok函数获得,通过msgrcv函数获取这个消息队列的内容。
4.实例化一个结构体,把要写入的信息写进去结构体的成员mtext中去,把这个结构体写入消息队列。

运行get后,消息队列中没有能够读取到的东西,会堵塞,直到send内容后才能读取到东西。
————————————————
版权声明:本文为CSDN博主「木下 似水」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanshimufeng/article/details/115409277

前面说了,key被写死,key的索引要去内核当中找到相关的ID队列,返回队列的ID,0x1234很死板,

以我们到获取key,而key通过ftok获取(网上搜索)

ftok

系统建立IPC通讯 (消息队列信号量共享内存) 时必须指定一个ID值。通常情况下,该id值通过ftok函数得到。

头文件
#include <sys/types.h>
#include <sys/ipc.h>
函数原型:
key_t ftok( const char * fname, int id )
fname就是你指定的文件名(已经存在的文件名),一般使用当前目录,如:
key_t key;
key = ftok(".", 1); 这样就是将fname设为当前目录。
            //id 可以随便写个字母或数字
key_t key;
key=ftok(".",'z');

printf("key id  is %x\n",key);

上代码插入程序当中,以十六进制输出key,即可查看id

id一致,说明在内核找到的队列一id致,即可开始通信

问题:如果内核没有这个队列,则创建队列,但一旦过多,导致内核当中的队列很多

       用完队列可不可以把它删掉?

引用   msgctl

     int msgctl(int msqid, int cmd, struct msqid_ds *buf);

 参数1 :id

参数2: 手册(一般是IPC_PHID):用完把消息队列链表从内核中移除

参数3:NULL
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追着太阳跑1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值