消息队列的系统限制

作者:冯老师,华清远见嵌入式学院讲师。

消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制。第一:议个消息的最大长度;第二:消息队列的最大容量;第三:最大消息队列数。

一、 一个消息的最大长度

示例程序如下:

#include

#include

#include

#include

#include

#include

#define N 8192

typedef struct

{

long mtype;

char mtext[N];

}MSG;

int main()

{

key_t key;

int msgid;

MSG buf;

if ((key = ftok(".", 5)) == -1)

{

perror("ftok");

exit(-1);

}

if ((msgid = msgget(key, 0666 | IPC_CREAT)) == -1)

{

perror("msgget");

exit(-1);

}

memset(&buf, 'a', sizeof(buf));

buf.mtype = 100;

if (-1 == msgsnd(msgid, &buf, N, 0))

{

perror("msgsnd 1");

exit(-1);

}

printf("**\n");

return 0;

}

程序执行结果如下:

linux@ubuntu:~/process/fifth$ ./a.out

msgsnd 1: Invalid argument

当N为8192时,可以成功执行,打印出’**”,当改成N为8193时,就出现了上面的错误,因此,消息队列中,每个消息的正文的最大长度为8192.

二、 消息队列的最大容量

示例程序如下:

#include

#include

#include

#include

#include

#include

#define N 8192

typedef struct

{

long mtype;

char mtext[N];

}MSG;

int main()

{

key_t key;

int msgid;

MSG buf;

if ((key = ftok(".", 5)) == -1)

{

perror("ftok");

exit(-1);

}

if ((msgid = msgget(key, 0666 | IPC_CREAT)) == -1)

{

perror("msgget");

exit(-1);

}

memset(&buf, 'a', sizeof(buf));

buf.mtype = 100;

if (-1 == msgsnd(msgid, &buf, N, 0))

{

perror("msgsnd 1");

exit(-1);

}

if (-1 == msgsnd(msgid, &buf, N, 0))

{

perror("msgsnd 2");

exit(-1);

}

if (-1 == msgsnd(msgid, &buf, 1, 0))

{

perror("msgsnd 3");

exit(-1);

}

return 0;

}

程序执行结果如下:

linux@ubuntu:~/process/fifth$ ipcs -q

------------------ Message Queues --------------------

key msqid owner perms used-bytes messages

0x0501451d 131076 linux 666 16384 2

可以看出,一个消息队列中的所有消息最多占16384字节。超过这个值后,发送函数msgsnd阻塞。

三、 最大消息队列数

示例程序如下:

#include

#include

#include

#include

#include

#include

#include

#define N 8192

typedef struct

{

long mtype;

char mtext[N];

}MSG;

int main()

{

key_t key;

int msgid, i, n = 0;

MSG buf;

for (i = 1; ; i++)

{

if ((key = ftok(".", i)) == -1)

{

fprintf(stderr, "ftok i=%d--%s\n", i, strerror(errno));

//perror("ftok");

exit(-1);

}

if ((msgid = msgget(key, 0666 | IPC_CREAT | IPC_EXCL)) == -1)

{

if (errno == EEXIST)

break;

//fprintf(stderr, "msgget i=%d--%s\n", i, strerror(errno));

//perror("msgget");

exit(-1);

}

n++;

}

printf("n=%d msgid=%d\n", n, msgid);

return 0;

}

程序执行结果,n为256.

该程序说明了,最多可以创建256个消息队列。

linux消息队列编程实例

转自:linux 消息队列实例 前言: 消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向其中按照一定的规则添加新消息:对消息队列有读权 ...

LINUX消息队列实战之一

前言 能说能抄能论皆不算,能写能打才是真功夫. 唠叨 反正我也是一个孤独的程序猿,多说一些奇奇怪怪的唠叨也无妨,第一次写消息队列,书本的东西和实战很不同,根据实战总结的一些注意事项会和大家分享,也敲打 ...

linux消息队列通信

IPC机制 进程间通信机制(Inter Process Communication,IPC),这些IPC机制的存在使UNIX在进程通信领域手段相当丰富,也使得程序员在开发一个由多个进程协作的任务组成的 ...

Linux消息队列应用

#include"sys/types.h" #include "sys/msg.h" #include "unistd.h" #includ ...

linux消息队列操作

对消息队列的操作无非有以下三种类型: 1. 打开或创建消息队列消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可以 ...

linux消息队列的使用

消息队列 *消息队列是内核地址空间中的内部链表,通过内核在各个进程之间传递的内容.消息顺序发送到消息队列中,每个消息队列都有IPC标识符唯一地进行标识. msgbuf结构 struct msgbuf{ ...

Linux消息队列

#include #include #include #include

Linux 消息队列编程

消息队列.信号量以及共享内存被称作 XSI IPC,它们均来自system V的IPC功能,因此具有许多共性. 键和标识符: 内核中的每一种IPC结构(比如信号量.消息队列.共享内存)都用一个非负整数 ...

linux 消息队列

消息队列,这个可是鼎鼎大名,经常在某些地方看见大家那个膜拜,那个,嗯,那个... 那就给个完整的例子,大家欣赏就行,我一直认为不用那个,嗯@ 这个队列的最大作用就是进程间通信,你要非搞个持久化,那也行 ...

随机推荐

安装vsphere5.1

安装vsphere5.1 安装前的准备(环境) 一台域控制器 一台sql2008数据库 整个环境都是在域环境中的 二.安装vCenter服务 在数据库里创建一个数据库,名字就叫vCenter 1.添加 ...

java视频教程 Java自学视频整理(持续更新中...)

视频教程,马士兵java视频教程,java视频 1.Java基础视频 完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

fedora25 下配置samba

本例是在 / 目录下建立share 文件夹为例 Sudo dnf install samba samba-common samba-clientsudo mkdir /share sudo chmod ...

Tree Traversals

Tree Traversals 原题链接 常见的二叉树遍历的题目,根据后序遍历和中序遍历求层次遍历. 通过后序遍历和中序遍历建立起一棵二叉树,然后层序遍历一下,主要难点在于树的建立,通过中序遍历和后序 ...

Qt OpenGL三维绘图

简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...

Linux Kernel 'perf_event.c'本地权限提升漏洞

漏洞版本: Linux Kernel 3.11-rc4 漏洞描述: Linux Kernel是一款开源的操作系统 Linux Kernel 'perf_event.c'存在一个安全漏洞,允许本地攻击者 ...

POJ 3422 Kaka's Matrix Travels(费用流)

POJ 3422 Kaka's Matrix Travels 题目链接 题意:一个矩阵.从左上角往右下角走k趟,每次走过数字就变成0,而且获得这个数字,要求走完之后,所获得数字之和最大 思路:有点类似 ...

以excel方式输出数据

主类Test: public class D201 {//get set 方法略去 private String d201_01; private String d201_02; private St ...

实现UDP高效接收/响应

环境Linux g++6.3.0 问题一:一个ip地址如何接收高并发请求 问题二:如何高并发响应消息 发送请求端只能通过ip地址+端口号向服务器发送请求码,所以服务器只能用一个UDP去绑定此ip以及端 ...

详解Windows Server 2008 R2下安装Oracle 11g

本篇文章转载 http://www.it165.net/database/html/201212/3385.html 一.安装前的准备工作: 1. 修改计算机名: 服务器的计算机名称对于登录到Orac ...

linux 消息队列最大值,linux 消息队列的限制相关推荐

  1. Linux进程间通信二 System V 消息队列简介与示例

    1. SystemV消息队列简介 消息队列,顾名思义即是存放消息的队列,内核为每个SystemV 维护了一个msg_queue的结构体,里面记录了每个消息队列的信息. struct msg_queue ...

  2. Linux进程间通讯之消息队列

    首先有个大体的概念:http://www.xefan.com/archives/83703.html 头文件: #include <sys/ipc.h> #include <sys/ ...

  3. Linux IPC实践(7) --Posix消息队列

    1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...

  4. Linux进程间通信详解(三) —— 消息队列及函数

    消息队列的概念 消息队列就是一个消息的链表,每个消息队列都有一个队列头,用结构struct msg_queue来描述.队列头中包含了该队列的大量信息,包括消息队列的键值.用户ID.组ID.消息数目.读 ...

  5. linux进程间通信:system V消息队列

    文章目录 基本介绍 编程接口 代码实例 消息队列的发送和接收 消息队列中的消息对象的属性控制 基本介绍 支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用 ...

  6. 【Linux系统编程】进程间通信--消息队列

    概述 消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法,其特点如下: 1)消息队列可以实现消息的随机查询.消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取. 2)消息队列允 ...

  7. linux posix 消息队列,实现posix消息队列示例分享

    // //  File.c //  UNIX_C // //  Created by 周凯 on 14-2-9. //  Copyright (c) 2014年 zk. All rights rese ...

  8. linux如何查看kafka消息队列,查看kafka消息队列的积压状况

    建立topicnode kafka-topics --create --zookeeper master:2181/kafka2 --replication-factor 2 --partitions ...

  9. linux内核数据结构实现--链表、队列和哈希

    C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想. 1. 内核链表和list_entry 1.1 普通链表实现 我们在语法书上学到的链 ...

  10. 消息队列 策略_消息队列技术点梳理(思维导图版)

    消息队列作为服务/应用之间的通信中间件,可以起到业务耦合.广播消息.保证最终一致性以及错峰流控(克服短板瓶颈)等作用.本文不打算详细深入讲解消息队列,而是体系化的梳理消息队列可能涉及的技术点,起到提纲 ...

最新文章

  1. 人工智能要多久才能理解动物?
  2. 放弃手工标记数据吧!斯坦福大学开源弱监督框架
  3. centos6下时间同步(ntp)操作
  4. window 内核详尽分析
  5. Web安全学习Week5
  6. ubuntu18.10安装octave
  7. spring四种依赖注入方式
  8. STM32——EEPROM
  9. 基于TableStore的数据采集分析系统介绍 1
  10. [转载] Java中的final变量、final方法和final类
  11. linux命令大全 美pdf,Linux编程命令详解_10331298_(美)Richard..pdf-得力文库
  12. 安装VCSA6.7(vCenter Server Appliance 6.7) 2019.7.9
  13. X86汇编语言从实模式到保护模式14:用户程序编程接口及其实现
  14. 网络下载器 迅雷大众版 v7.9.42.5050 精简绿色版
  15. win10的ios镜像
  16. Spring Security定义多个过滤器链(10)
  17. Cadence OrCAD Capture 原理图设计过程产生的文件总结与说明
  18. 2022蓝桥杯A组Python
  19. 查看oracle执行计划方法( 一)
  20. (8.2)利用Newton-Euler公式求解二连杆的动力学方程:

热门文章

  1. 红帽社区内容需要订阅访问
  2. JAVA计算机毕业设计大学生旅游拼团网站Mybatis+源码+数据库+lw文档+系统+调试部署
  3. 三菱PLC的MX_COMPONENT安装过程
  4. 盘点那些年我们一起玩过的网络安全工具
  5. FreeSwitch 相关资料
  6. Scrum敏捷开发模式介绍与实践
  7. 敏捷开发模式下的BA岗
  8. python xlwt写excel_Python使用xlwt写excel并设置写入格式
  9. 开源界的视频会议系统-FreeSWITCH
  10. Poker2 的爱与愁-入手两周,小小体会