linux消息队列的使用
消息队列
*消息队列是内核地址空间中的内部链表,通过内核在各个进程之间传递的内容。消息顺序发送到消息队列中,每个消息队列都有IPC标识符唯一地进行标识。
msgbuf结构
struct msgbuf{long mtype; //消息类型char mtext[1]; //消息数据
};
msgid_ds结构
struct msqid_ds{struct ipc_perm msg_perm;time_t msg_stime; //发送到队列的最后一个消息的时间戳time_t msg_rtime; //从队列中获取的最后一个消息的时间戳time_t msg_ctime; //对队列进行最后一次变动的时间戳unsigned long __msg_cbytes; //在队列上所驻留的字节总数msgqnum_t msg_qnum; //当前处于队列中的消息数目msglen_t msg_qbytes; //队列中能容纳的字节的最大数目pid_t msg_lspid //发送最后一个消息进程的PIDpid_t msg_lrpid //接收最后一个消息进程的PID
};
ipc_perm结构
struct ipc_perm{key_t key; //函数msget()使用的键值uid_t uid; //用户的UIDgid_t gid; //用户的GIDuid_t cuid; //建立者的UIDgid_t cgid; //建立者的GIDunsigned short mode; //权限unsigned short seq; //序列号
};
键值构建ftok()函数
#include<sys/types.h>
#include<sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
//pathname必须是已经存在的目录
获得消息msgget()函数
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgget(key_t key, int msgflg);
/*第一个参数可以用ftok()函数生成
msgflg参数:
1.IPC_CREAT 如果内核中不存在该消息队列,则创建它
2.IPC_EXCL 当和IPC_CREAT一起使用时,如果队列早已存在则将出错
*/
发送消息msgsend()函数
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgsend(int msqid, const void *msgp, size_t msgsz, int msgflg);
/*
第一个参数从msgget()获得
第二个参数指向一个消息缓冲区
第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节)
第四个参数设置成0表示忽略,设置成IPC_NOWAIT,如果消息队列已经满了,则消息不写进队列中,如果不设置则阻塞直到可以写消息为止
*/
接收消息msgrcv()函数
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
/*
第一个参数从msgget()获得
第二个参数消息缓冲变量的地址
第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节)
第四个参数指定要从队列中获取的消息类型,内核查找队列中匹配类型的第一个到达的消息,如果传0则返回队列最早的消息,不管类型
第五个参数设置成IPC_NOWAIT,如果消息队列没有消息则返回ENOMSG,否则进程将阻塞直到满足条件的消息到达,如果客户等待消息的时候队列被删除则返回EIDRM,如果进程阻塞并等待消息的时候捕获信号则返回EINTR
*/
转载于:https://www.cnblogs.com/zzmv/p/5689787.html
linux消息队列的使用相关推荐
- linux消息队列非亲缘,linux进程
linux进程Tag内容描述: 1.linux消息队列进程通信 一.消息队列的基本概念消息队列(也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一.另外两种是信号灯和共享内存.这些IPC机制 ...
- linux.调整收发队列,linux消息队列通信
程序目的:学习linux消息队列通信 所用主要函数:msgget(),msgsnd(),msgrcv(),msgctl() 首先介绍每个函数的用法: (1)msgget 使用格式: #include ...
- linux 消息队列 msgget/msgsnd/msgrecv
专栏内容:linux下并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息:地势坤,君子以厚德载物. 目录 前言 概述 原理 消息队列的大小 查看资源 接口 代码演示 结尾 前言 本专栏主要分 ...
- php 阻塞消息队列,linux 消息队列阻塞
php 使用socket告知Python,可以在socket上声明是及时推送还是延迟推送######哦?愿闻其详 那要是很多用户同时并发呢######system 调用外部程序是一种办法######@ ...
- PHP下操作Linux消息队列完成进程间通信的方法
2019独角兽企业重金招聘Python工程师标准>>> 来源:http://www.jb51.net/article/24353.htm 关于Linux系统进程通信的概念及实现可查看 ...
- [Linux]消息队列
我们知道进程间通信的方法有多种,主要有管道,消息队列,信号量,共享内存,socket等.之前介绍过管道,今天再介绍一个新的概念–消息队列. 消息队列:将一个进程到另一个进程之间发送数据块的方式.这些发 ...
- linux 消息队列机制
现在我们来讨论第三种也是最后一种System V IPV工具:消息队列.在许多方面看来,消息队列类似于有名管道,但是却没有与打开与关闭管道的复杂关联.然而,使用消息队列并没有解决我们使用有名管道所遇到 ...
- linux消息队列的内核限制
[from:http://blog.csdn.net/cwj649956781/article/details/8804908] 消息队列: 1.每次msgrcv一个消息,1.那个消息会在内核中移除 ...
- linux消息队列总结
1.消息队列简介 实现linux进程通信的方式有5种: --信号(Singal) --管道(Pipe) --消息队列(Message) --信号量(Semaphore) 每种进程通信方式实现方式和功能 ...
- linux 消息队列_Linux消息队列
消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器.将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序.可以解决两个进程的读写速度不同(处理数据速度不同),系统 ...
最新文章
- 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?
- Spring的quartz定时器重复执行二次的问题解决
- VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
- 汇编(8086cpu): 地址寄存器
- 如何处理扎堆而至的工作任务?
- spring定时器,定时器一次执行两次的问题
- Linux下文件查找命令
- 利用JSP编程技术实现一个简单的购物车程序
- flutter 必须掌握的CustomScrollView及Sliver类型控件的几种使用
- ASP一个小型搜索引擎的设计与实现
- 关于解决Ubuntu下apt-get的Unmet dependencies依赖错误
- 关闭vscode中的源代码管理
- VLAN通过多个交换机传输,实现同VLAN互通,不同VLAN不通
- Python实例浅谈--Python与C/C++相互调用
- 北师大数据结构期末考试复习
- python微信自动发消息_如何利用python3实现微信定时自动发消息和图片?
- python线性回归算法
- [附源码]java毕业设计企业员工管理系统
- 在VS中实现QT的多国语言翻译
- 周报(1114-1120)
热门文章
- SqlServer 左右内连接
- 解决Eclipse无法打开“Failed to load the JNI shared library”(转)
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')...
- 一文读懂HTTP/2及HTTP/3特性
- 朴素Paxos(Basic Paxos)算法java简易实现
- 第五章项目 体检套餐管理系统
- 关于项目中的日期提交
- DoTween(HOTween V2) 教程
- Android关于finish()与System.exit()都不能退出应用的原因
- 我的第一个python 代码