首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程通信(二)消息队列(System V 消息队列)

一、System V 消息队列简介 消息队列:消息队列的本质是由Linux内核创建用于存放消息的链表,并且其功能是用来存放消息的,所以又称之为消息队列。...在Linux的不同进程中,包括有血缘的进程和无血缘的进程,都可以通过Linux消息队列API所得到的消息队列唯一标识符对消息队列进行操作。...二、分析消息队列的数据结构 Linux为了维护消息队列,为消息队列创建了数据结构,接下来我们来分析一下消息队列的结构以及消息队列节点的结构。...内核所设计消息队列的大致模样,这对于我们理解消息队列Linux API有着至关重要的作用。...此时需要自己创建msqid_ds结构体并初始化然后传入。 (3)IPC_STAT,此时buff作为传出参数可以获取消息队列消息头中msg_perm结构体的在内核中的内容。

2.5K20

Linux内核编程--消息队列

一,关于Linux中的IPC IPC的意思是“ 进程间通信机制”,Linux内核有三种常用IPC对象可以拿来做进程间通信--消息队列,共享内存,信号量。...这三种IPC对象在Linux内核中都以链表的形式存储,它们都有特定的ID来标识(消息队列标识符msqid、共享内存标识符shmid,信号量标识符semid)。...与消息队列关联的结构体--msqid_ds/mq_attr msqid_ds常用于SYSTEM_V版的函数 struct msqid_ds{ struct ipc_perm msg_perm;...msgctl()常用的cmd: IPC_STAT: 获取该消息队列的信息,获取到的信息会储存在结构体msqid_ds类型的buf中 IPC_SET: 设置消息队列的属性,要设置的属性需先在结构体msqid_ds...参考教程: 《UNIX环境高级编程第3版》 https://programs.team/linux-message-queue-programming.html https://www.tutorialspoint.com

4.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux进程间通信(二) - 消息队列

    消息队列 消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。...消息队列中的每条消息通常具有以下属性: Ø 一个表示优先级的整数; Ø 消息的数据部分的长度; Ø 消息数据本身; 下面我们分别阐述POSIX消息队列和System V消息队列,这2种消息队列目前Linux...在Linux 2.6中该类型的定义为整型: #include typedef int mqd_t; // 关闭消息队列 mqd_t mq_close(mqd_t mqdes...下面是在Linux 2.6下shell对启动进程的POSIX消息队列大小的限制: [root@rocket ipc]# ulimit -a|grep message POSIX message queues...ds; iret = msgctl(msgid, IPC_STAT, (struct msqid_ds *)&ds); if(iret == -1) { printf

    6.2K90

    进程间通讯(五).message queue(2)

    . */ extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW; __msqid 消息队列的ID __cmd.../* Get `ipc_perm' options. */ //把msgid_ds结构中的数据设置为消息队列的当前关联值,即用消息队列的当前关联值覆盖msgid_ds的值 __buf msqid_ds...对删除消息队列的处理不是很完善,因为每个消息队列没有维护引用计数(打开文件有这种计数器),所以在队列被删除以后,仍在使用这一队列的进程在下次对队列进行操作时会出错返回 函数成功时返回0,失败时返回-1 ---- msqid_ds...在 bits/msq.h 中有关于 msqid_ds 的定义 /* Structure of record for one message inside the kernel....The type `struct msg' is opaque. */ struct msqid_ds { struct ipc_perm msg_perm; /* structure describing

    80620

    Linux进程间通信【消息队列、信号量】

    关于消息队列更详细的介绍可以看看这两篇文章: 《什么是消息队列》 《消息队列详解》 1.2、消息队列的数据结构 同属于 System V 标准,消息队列也有属于自己的数据结构 注:msg 表示 消息队列 struct msqid_ds...int msgflg 位图,可以设置消息队列的创建方式及创建权限 与 共享内存 的 shmget 可以说是十分相似了,关于 ftok 函数计算 key 值,这里就不再阐述,可以在这篇文章中学习 《Linux...include #include #include int msgctl(int msqid, int cmd, struct msqid_ds...函数 组成部分 含义 返回值 int 成功返回 0,失败返回 -1 参数1 int msqid 待控制的消息队列 id 参数2 int cmd 控制消息队列的具体动作,同样是位图 参数3 struct msqid_ds...假设想访问具体 ipc 中的资源,可以通过 ipc_id_arr[n] 强转为对应类型指针,再通过 -> 访问其中的其他资源 以上方法就是 多态,通过父类指针,访问成员 ---- 总结 以上就是本次关于 Linux

    44830

    进程间通讯(五).message queue(1)

    前言 UNIX/Linux 是多任务的操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间的通讯就很有必要了 进程间通信,Inter process communication...,简称 IPC,在 UNIX/Linux 下主要有以下几种方式: 无名管道 ( pipe ) 有名管道 ( fifo ) 信号 ( signal ) 信号量 ( semaphore ) 消息队列 ( message...都是随内核持续的 消息队列的链表结构类型于下: /* Obsolete, used only for backwards compatibility and libc5 compiles */ struct msqid_ds...对于每个消息队列,Linux 内核为标识符分配44B,为消息队列数据结构分配 96B。为了获得更多的消息队列资源,可以动态增加 msgmni 取值。

    1.1K10
    领券