当前位置:网站首页>unix环境编程 第十五章 15.7消息队列
unix环境编程 第十五章 15.7消息队列
2022-08-09 10:26:00 【玛丽苏打肉饼】
消息队列是消息的链接表,存储在内核中,由消息队列标识符标识,简称队列ID。
msgget用于创建一个新队列或者打开一个现有的队列。
#include <sys/msg.h>
int msgget(key_t key,int flag);
//成功返回消息队列ID,失败返回-1
在创建新的队列的时候,要初始化msqid_ds结构的下列成员:
- ipc_perm结构按15.6.2节所述进行初始化。该结构中的mode成员按flag中的相应权限位设置。
- msg_qnum,msg_lsqid,msg_lrpid,msg_stime和msg_rtime都设置为0。
- msg_ctime设置为当前时间。
- msg_qbytes设置为系统限制值。
msgsnd将新消息添加到队列尾端。
msgrcv用于从队列中获取消息。
msgctl函数对队列执行多种操作。它和另外两个与信号量及共享存储有关的函数都是XSI IPC的类似于ioctl的函数。
#include <sys/msg.h>
int msgctl(int msqid,int cmd,struct msqid_ds *buf);
//成功返回0,出错返回-1
cmd参数指定对msqid指定的队列要执行的命令。
调用msgsnd将数据放到消息队列中
#include <sys/msg.h>
int msgsnd(int msqid,const void *ptr,size_t nbytes,int flag);
//成功返回0,失败返回-1
ptr参数指向一个长整型数,它包含了正的整型消息类型,其后紧接着的是消息数据。
当msgsnd返回成功的时候,消息队列相关的msqid_ds结构会随之更新,表明调用的进程ID,调用时间以及消息队列中的新增消息。
msgrcv从队列中取用消息。
#include <sys/msg.h>
ssize_t msgrcv(int msqid,void *ptr,size_t nbytes,long type,int flag);
//成功返回消息数据部分长度,出错返回-1
ptr参数指向一个长整型数,其后跟随的是存储实际消息数据的缓冲区。nbytes指定数据缓冲区的长度。若返回的消息长度大于nbytes,而且在flag中设置了MSG_NOERROR位,则该消息会被截断。如果没有设置这一标志,而消息又太长,则出错返回E2BIG。
参数type指定想要哪一种消息。
type==0,返回队列中的第一个消息。
type>0返回队列中消息类型为type的第一个消息。
type<0返回队列中消息类型值小于等于type绝对值的消息,如果这种消息有若干个,则取类型值最小的消息。
边栏推荐
猜你喜欢
3D printed this DuPont cable management artifact, and the desktop is no longer messy
使用.NET简单实现一个Redis的高性能克隆版(四、五)
Demand side power load forecasting (Matlab code implementation)
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
强化学习 (Reinforcement Learning)
浅析JWT安全问题
《刷题日记》2
Attentional Feature Fusion
Tom Morgan | Twenty-One Rules of Life
Nodejs服务端
随机推荐
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
Transformer+Embedding+Self-Attention原理详解
用Word写代码
By asking where the variables are stored, the shepherd boy laughed and said to use pointers, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the use of go lang type pointers (Poin
snmp++编译错误问题解决方法
深度学习--生成对抗网络(Generative Adversarial Nets)
Tom Morgan | Twenty-One Rules of Life
Celebrate ranked 18
多行省略和选择器
Nodejs服务端
排序1:冒泡排序
元组 字典 集合
使用.NET简单实现一个Redis的高性能克隆版(四、五)
编程技术提升
cannot import name ‘load_offloaded_weights‘ from ‘accelerate.utils‘ (/home/huhao/anaconda3/envs/huha
阿里神作!吃透这份资料入厂率高达99%
mongodb学习笔记
自定义类型:结构体,枚举,联合
Technology Sharing | Sending Requests Using cURL
基于信号量与环形队列实现读写异步缓存队列