1.消息队列

(1)消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法

(2)每个数据都被认为是有一个类型,接收者进程接收的数据块可以有不同的类性值

(3)消息队列也有管道一样的不足,就是每个消息的最大长度(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的总数(MSGMNI)

cat /proc/sys/kernel/msgmax

2.IPC数据结构

3.消息队列结构

4.消息队列在内核中的表示

5.消息队列函数

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/msg.h>

int msgget(key_t key, int msgflg);

int msgctl(int msqid, int cmd, struct msqid_ds* buf);

int msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);

ssize_t  msgrcv(int msqid, void* msgp, size_t msgsz, long msgtyp, int msgflg);

6.msgget函数

(1)功能:用来创建和访问一个消息队列

(2)圆形:int msgget(key_t key, int msgflg);

(3)参数:key:某个消息队列的名字

msgflg:有九个权限标志构成,它们的用法和创建文件时使用的mode模式标志一样的

(4)返回值:成功返回一个非负整数,即该消息队列的标识码;失败返回-1

ipcs

ipcrm -q msgid

ipcrm -Q key

#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>#include <stdlib.h>
#include <stdio.h>
#include <errno.h>#define ERR_EXIT(m) \do \{ \perror(m); \exit(EXIT_FAILURE); \}while(0)int main(void) {int msgid;msgid = msgget(1234, 0666 | IPC_CREAT);//msgid = msgget(1234, 0666 | IPC_CREAT | IPC_EXCL); //第二次创建会失败//msgid = msgget(IPC_PRIVATE, 0666 | IPC_CREAT | IPC_EXCL); //每一次都会创建一个新的//msgid = msgget(IPC_PRIVATE, 0666);//msgid = msgget(1234, 0666 | IPC_CREAT);msgid = msgget(1234, 0); //按照原来创造的权限打开if(msgid == -1) ERR_EXIT("msgget");printf("msgget succ\n");printf("msgid=%d\n", msgid);return 0;
}

7.msgctl函数

(1)功能:消息队列的控制函数

(2)原型:int msgctl(int msqid, int cmd, struct msqid_ds* buf);

(3)参数:msqid:由msgget函数返回的消息队列标识码

cmd:时将要采取的动作(由三个可取值)

(4)返回值:成功返回0,失败返回-1

(5)cmd:将要采取的动作

msg_rmid.cpp

#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>#include <stdlib.h>
#include <stdio.h>
#include <errno.h>#define ERR_EXIT(m) \do \{ \perror(m); \exit(EXIT_FAILURE); \}while(0)int main(void) {int msgid;msgid = msgget(1234, 0); //按照原来创造的权限打开if(msgid == -1) ERR_EXIT("msgget");printf("msgget succ\n");printf("msgid=%d\n", msgid);msgctl(msgid, IPC_RMID, NULL);  return 0;
}

msg_set.cpp

#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>#include <stdlib.h>
#include <stdio.h>
#include <errno.h>#define ERR_EXIT(m) \do \{ \perror(m); \exit(EXIT_FAILURE); \}while(0)int main(void) {int msgid;msgid = msgget(1234, 0); //按照原来创造的权限打开if(msgid == -1) ERR_EXIT("msgget");printf("msgget succ\n");printf("msgid=%d\n", msgid);struct msqid_ds buf;msgctl(msgid, IPC_STAT, &buf);  sscanf("600", "%o", &buf.msg_perm.mode);msgctl(msgid, IPC_SET, &buf);return 0;
}

msg_stat.cpp

#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>#include <stdlib.h>
#include <stdio.h>
#include <errno.h>#define ERR_EXIT(m) \do \{ \perror(m); \exit(EXIT_FAILURE); \}while(0)int main(void) {int msgid;msgid = msgget(1234, 0); //按照原来创造的权限打开if(msgid == -1) ERR_EXIT("msgget");printf("msgget succ\n");printf("msgid=%d\n", msgid);struct msqid_ds buf;msgctl(msgid, IPC_STAT, &buf);  printf("mode=%o\n", buf.msg_perm.mode);printf("bytes=%ld\n", buf.__msg_cbytes);printf("number=%d\n", (int)buf.msg_qnum);printf("msgmnb=%d\n", (int)buf.msg_qbytes);return 0;
}

systen v消息队列(一)相关推荐

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

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

  2. System V 消息队列

    一.System V 消息队列 有一个队列,队列存放各种消息.每个进程可以把数据封存在消息中,再放入队列.每个进程都可以拿到消息队列,再从中取出/放入消息. 消息队列也有管道一样的不足,就是每个消息的 ...

  3. System V消息队列

    简介 这篇笔记中介绍了消息队列的基本知识和Posix消息队列.这篇笔记主要学习记录System V消息队列,并对比两个消息队列. System V消息队列是更早的一个消息队列的实现.Posix消息队列 ...

  4. Linux网络编程之System V消息队列

    System V消息队列函数: #include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int ...

  5. System V 消息队列概念以及相关函数(msgget、msgsnd、msgrcv、msgctl)介绍

    System V 消息队列 消息队列是半双工的通信方式 1.1 创建一个消息队列 消息队列的特点:消息只能一条的读取,不能多读取,也不能少读取,每条消息有一个类型,可以按照消息的类型读取 创建或者打开 ...

  6. (P26)system v消息队列:msgsnd函数 ,msgrcv函数

    文章目录 1.msgsnd函数 2.msgrcv函数 1.msgsnd函数 功能:把一条消息添加到消息队列中原型:int msgsnd(int msqid, const void *msgp, siz ...

  7. Systerm V消息队列

    Systerm V消息队列: 引用消息队列的句柄由msgget()调用返回的标识符,这点与其他形式I/O所使用的的文件描述符不同: 通过消息队列的通讯时面向消息的,即读者接收由写者写入的整条消息: 除 ...

  8. 06.System V 消息队列

    1.概述 System V消息队列使用消息队列标识符(message queue identifier)标识.具有足够特权的任何进程都可以往一个给定队列放置一个消息,具有足够特权的任何进程都可以从一个 ...

  9. system V消息队列的使用

    最近在学习网络,主要是<UNIX网络编程>这本书,现在给大家分享以下我在学习消息队列这一部分的心得和体会,如果有不足之处希望大家批评指正. 大家知道linux中支持Posix消息队列和Sy ...

  10. Linux进程通信之System V消息队列

    System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...

最新文章

  1. kafka异步推送设置重试_一篇文章了解 Kafka 幂等性的原理及实践
  2. 使用JAVA建立稳定的多线程服务器
  3. 达观数据分析平台架构和Hive实践——TODO
  4. mybatis查询时间段sql语句
  5. 韩军为花荣的《操盘手》写的序,不错!很有枭雄味道
  6. python设计一个动物类_python面向对象 动物园 例题
  7. python爬虫,记录一下爬取过程,列表数据,翻页,post方式,保存字典
  8. javascript中的字符串和数组的互转
  9. Android 位置服务——BaiduLocation的使用
  10. java transform的作用_为什么旋转(0deg)很重要?
  11. 全国第一条5G步行街开街;罗永浩回应直播有多赚钱:没那么夸张;Windows Terminal 1.4发布|极客头条
  12. Sql查找断号区间...
  13. “红孩儿”成中科院博士!做CTO身价过亿!
  14. servletconfigservletcontext
  15. OpenCV使能CUDA加速
  16. VSCode安装LeetCode插件
  17. 欧姆龙nj与nx哪个高端_没想到还有比三菱更垃圾的PLC,欧姆龙隆重登场
  18. 一元二次方程的解法(Python语言)
  19. 爬取电影天堂最新电影的名称和下载链接(增量爬取mysql存储版)
  20. Cannot use import statement outside /npm WARN saveError ENOENT: no such file or directory

热门文章

  1. 在正常系统如windows/MacOS/Linux等体验假勒索病毒WamaCry(永恒之蓝)
  2. matlab ocx控件,matlabr.ocx控件下载
  3. 2019年南京大学计算机考研复试机试真题
  4. 计算机用的代码怎么写,什么是代码,代码怎么写,怎么样写入电脑
  5. 用html制作带阴影小球弹跳,AE怎么制作一个有影子的弹跳小球动画?
  6. emmet插件及PyV8
  7. GD32F103使用串口DMA收+发 信息(无中断)
  8. msfconsole常用搜索命令search
  9. Excel插件:方方格子
  10. 对称密码(共享秘钥密码)