问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教一个关于linux消息队列的问题

发布网友 发布时间:2022-04-22 02:58

我来回答

1个回答

热心网友 时间:2022-06-29 10:10

一般使用步骤:

1. 用ftok产生一个key。

2. 调用msgget(使用key作为参数)产生一个队列

3. 进程可以用msgsnd发送消息到这个队列,相应的别的进程用msgrcv读取。

这里需要注意msgsnd可能会失败的两个情况:

a) 可能被中断打断(包括msgsnd和msgrcv). 尤其是大流量应用中更容易出现. 比较安全的用法是判断操作是否被中断打断,如果被打断, 则需要继续尝试。

b) 消息队列满。产生这个错误,则需要考虑提高系统消息队列规格,或者查看消息接收处是否有问题

4. msgctl函数可以用来删除消息队列
消息队列产生之后,除非明确的删除(可以用),产生的队列会一直保留在系统中。linux下消息队列的个数是有限的,注意不要泄露。如果 使用已经达到上限,msgget调用会失败,产生的错误码对应的提示信息为no space left on device.

注意点:

1.消息的类型 mtype 不需为非0值。如果使用0,则msgsnd会失败,并得到”Invalid argument“错误。

2.msgflg为0表示阻塞等待,如果msgflg为IPC_NOWAIT表示非阻塞。

3.最好使用root权限执行消息队列,否则msgrcv 提示 "Permission denied"。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? linux系统自带的消息队列和rabbitmq有什么区别? linux 消息队列编程 linux系统编程中的消息队列该怎么使用呀?? Linux多线程同步之消息队列有何特点 电脑中win键是哪个键 键盘windows是哪个键 021-60444623电话 说是建行信用卡 真假啊 4006763673给我打电话说是建行信用卡中心的给我提... 02160345757是不是建行信用卡的电话 怎么把iphone所有照片按时间排列? 换机助手导入苹果13相册按时间顺序排列 银行信用卡的外呼电话是搞什么用的 建行信用卡外呼怎么老是打电话 苹果手机照片怎么按照拍摄时间排序 windows是哪个键子 iphone相簿里的照片怎么排顺序 95134是什么电话? 怎么把iphone所有照片按时间排列 请问02138695888到底是怎么电话 今天接到02138695888电话,说是建行信用卡中心催款... linux系统中哪些可以用于进程间的通信消息队列临界... Linux下 用消息队列收发长度不同的消息 linux 有没有直接发送消息到队列的命令 请问Linux下如何清除消息队列queue中的内容 Linux下编程消息队列怎么封装较好,怎么保证2个进... linux 消息队列 的权限问题 如何释放linux过时消息队列 高手进!在Linux系统中用消息队列实现两个进程之间... linux消息队列,读而不删怎么弄 linux编程的利用消息队列在两个进程间通信,怎么写... linux 消息队列什么时候删除 linux 程序异常退出,怎么删除消息队列 win10浏览器无法访问页面 win10浏览器无法显示此页怎么办 win10为什么ie浏览器总是无法访问页面 联想win10系统自带edge浏览器打开无法访问该页面,... win10浏览器打不开网页怎么回事 0755是什么地方的区号 0755开头的是什么电话 深圳各区电话号码是怎么区分的?