linux消息队列优缺点,linux消息队列概念
消息队列的概念:
消息队列提供了一种从进程向另一个进程发送一个数据块的方法。每个数据块都被认为是用一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞的问题。消息队列与管道不同的事,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。消息队列和命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也是有一个上限(MSGMNI)。
IPC对象数据结构:
struct ipc_perm
{
key_t __key;
uid_t uid;
gid_t gid;
uid_t cuid;
gid)t cgid;
unsigned short mode;
unsigned short short__seq;
};
创建新消息队列或取得已存在消息队列:
int msgget(key_t key,int msgflg)
key:可以认为是一个端口号,也可以由函数ftok生成;
msgflg:
IPC_CREAT:如果IPC不存在,则创建一个IPC资源,否则打开操作。
IPC_EXCL:只有在共享内存不存在的时候,新的内存共享才建立,否则就产生错误。
如果单独使用IPC_CRETA,XXXget()函数要么返回一个已经存在的共享内存的操作符,要么返回一个新建的共享内存的标识符。
如果将IPC_CRETA和IPC_EXCL标志一起使用,XXXget()将返回一个新建的IPC标识符;如果IPC资源存在,则返回-1。
IPC_EXEL标志本身并没有太大的意义,但是和IPC_CREAT标志一起使用可以用来保证所得对象是新建的,而不是打开已有的对象。
向队列读/写消息:
读消息:ssize_t magrcv(int msqid,void* msgp,size_t masgsz,long msgtyp,int msgflg);
写消息:int msgsnd(int msqid,const void* msgp,size_t msgsz,int msgflg);
参数:
msgqid:消息队列的标识码;
msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,
struct msgstru
{
long mytype;//大于0
char mtext[用户指定大小];
};
msgsz:消息的大小;
msgtyp:从消息队列内读取的消息形态。如果值为零,则表示消息队列中的所有消息都会被读取;
msgflg:用来指明核心程序在队列没有数据的情况下所应采取的行动。如果msgflg和常数IPC_NOWAIT合用,则在msgsnd()执行时若是消息队列已满,则msgsnd()将不会阻塞,而是立即返回-1,如果执行的是msgrcv(),则在消息队列呈空时,不做等待马上返回-1,并设定错误码为ENOMSG。当msgflg为0时,msgsnd()和msggrc()在队列呈空的情形时,采取阻塞等待的处理模式。
设置消息队列的属性:
int msgctl(int msgqid,int cmd,struct msqid_ds* buf)
参数:
msgctl系统调用对msgqid标识的队列消息执行cmd操作,系统定义了3种cmd操作:IPC_STAT,IPC_SET,IPC_RMID
IPC_STAT:该命令用来获取消息队列对应的msgqid_ds数据结构,并将其保存到buf指定的地址空间。
IPC_SET:该命令用来设置消息队列的属性,要设置的属性存储在buf中。
IPC_RMID:从内核中删除msgqid标识的消息队列。
ftok函数:把一个已存在的路径名和一个整数标识转换成一个key_t值,称为IPC键。
key_t ftok(const char* pathname,int proj_id)
ftok的典型实现调用stat函数,然后组合一下三个值:
1、pathname所在的文件系统的信息(stat结构的st_dev成员);
2、该文件在本文系统内的索引节点号(stat结构的st_ino成员)
3、proj_id的低序8位(不能为0)
不能保证两个不同的路径名与同一个proj_id的组合产生不同的键,因为上面所列三个条目(文件系统标识符、索引节点、proj_id)中的信息位数可能大于一个整数的信息位数。
linux消息队列优缺点,linux消息队列概念相关推荐
- linux日志文件优缺点,Linux日志文件总结
Linux日志文件总结 近期做笔试题目,考察Linux日志配置文件相关内容,由于对此不了解,故看鸟哥的私房菜中的认识与分析日志文件一章,总结如下相关信息. 日志文件可以记录一个时间的何时.何地.何人. ...
- linux命令行优缺点,linux shell优缺点
一.优点方面: 1.shell的语法和结构比较简单,易于掌握 2.学习和使用也比较方便,上手比较容易 3.常用命令也比较好记,不清楚的情况下,可以通过man命令迅速找到相关的说明 4.shell是解释 ...
- Linux进程间通讯之消息队列
首先有个大体的概念:http://www.xefan.com/archives/83703.html 头文件: #include <sys/ipc.h> #include <sys/ ...
- Linux进程间通信详解(三) —— 消息队列及函数
消息队列的概念 消息队列就是一个消息的链表,每个消息队列都有一个队列头,用结构struct msg_queue来描述.队列头中包含了该队列的大量信息,包括消息队列的键值.用户ID.组ID.消息数目.读 ...
- Linux进程间通信二 System V 消息队列简介与示例
1. SystemV消息队列简介 消息队列,顾名思义即是存放消息的队列,内核为每个SystemV 维护了一个msg_queue的结构体,里面记录了每个消息队列的信息. struct msg_queue ...
- Linux IPC实践(7) --Posix消息队列
1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...
- linux进程间通信:system V消息队列
文章目录 基本介绍 编程接口 代码实例 消息队列的发送和接收 消息队列中的消息对象的属性控制 基本介绍 支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用 ...
- 【Linux系统编程】进程间通信--消息队列
概述 消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法,其特点如下: 1)消息队列可以实现消息的随机查询.消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取. 2)消息队列允 ...
- linux posix 消息队列,实现posix消息队列示例分享
// // File.c // UNIX_C // // Created by 周凯 on 14-2-9. // Copyright (c) 2014年 zk. All rights rese ...
- linux如何查看kafka消息队列,查看kafka消息队列的积压状况
建立topicnode kafka-topics --create --zookeeper master:2181/kafka2 --replication-factor 2 --partitions ...
最新文章
- 扩展城市信道etu模型matlab仿真,LTE System Toolbox:无线通信系统的仿真、分析和测试...
- anaconda降级python失败_如何降级Python版本安装spyder?
- LL-verilog索引向量+-号用法
- Python线程安全问题及解决方法
- C++/C--删除string末尾字符的方法【转载】
- Spark 训练机器学习模型莫名报错(java.lang.stackoverflow)
- ATEN瞄准专业级影音市场,发表全新VanCryst™视频系列产品线
- adb冲突 傲软_ubuntu下安装adb工具集与android-tools-adb产生冲突的问题
- HTML5程序设计 SVG
- React Native填坑之旅--class(番外篇)
- 存储过程与自定义函数的区别
- mysql 1062_mysql #1062 报错
- Java招聘网站源码+页面
- 企业微信(h5页面嵌入企业微信)的分享总结
- 通信工程师传输与接入ATM网络组成和接口
- Phonetic symbol 清辅音 - θ 与 s
- 宝贝怎么查询历史价格?有何意义?
- BootLoader 介绍 与 uboot 简介
- Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等
- 国内旅游网站排名以及各自的特色
热门文章
- Android安卓开发-Helloworld
- python rtf转txt_批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹...
- 对数周期天线工作原理
- PC电脑控制手机iphone(iOS 11、iOS 12、iOS 13),需越狱
- WPS Office 2020 for Mac(wps2020)3.8.0(6081)中文
- 线阵相机与面阵相机的区别及其应用
- 进销存软件哪个简单好用?
- mac pem证书登陆linux,Mac通过SSH使用PEM文件登录服务器
- 2022年北京航空航天大学计算机考研复试分数线
- 金额要用BigDecimal,原理分析