消息队列


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

msgbuf结构

struct msgbuf{
long mtype; //消息类型
char mtext[1]; //消息数据
};

msgid_ds结构

struct msqid_ds{
struct ipc_perm msg_perm;
time_t msg_stime; //发送到队列的最后一个消息的时间戳
time_t msg_rtime; //从队列中获取的最后一个消息的时间戳
time_t msg_ctime; //对队列进行最后一次变动的时间戳
unsigned long __msg_cbytes; //在队列上所驻留的字节总数
msgqnum_t msg_qnum; //当前处于队列中的消息数目
msglen_t msg_qbytes; //队列中能容纳的字节的最大数目
pid_t msg_lspid //发送最后一个消息进程的PID
pid_t msg_lrpid //接收最后一个消息进程的PID
};

ipc_perm结构

struct ipc_perm{
key_t key; //函数msget()使用的键值
uid_t uid; //用户的UID
gid_t gid; //用户的GID
uid_t cuid; //建立者的UID
gid_t cgid; //建立者的GID
unsigned short mode; //权限
unsigned short seq; //序列号
};

键值构建ftok()函数

#include<sys/types.h>
#include<sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
//pathname必须是已经存在的目录

获得消息msgget()函数

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgget(key_t key, int msgflg);
/*第一个参数可以用ftok()函数生成
msgflg参数:
1.IPC_CREAT 如果内核中不存在该消息队列,则创建它
2.IPC_EXCL 当和IPC_CREAT一起使用时,如果队列早已存在则将出错
*/

发送消息msgsend()函数

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgsend(int msqid, const void *msgp, size_t msgsz, int msgflg);
/*
第一个参数从msgget()获得
第二个参数指向一个消息缓冲区
第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节)
第四个参数设置成0表示忽略,设置成IPC_NOWAIT,如果消息队列已经满了,则消息不写进队列中,如果不设置则阻塞直到可以写消息为止
*/

接收消息msgrcv()函数

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
/*
第一个参数从msgget()获得
第二个参数消息缓冲变量的地址
第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节)
第四个参数指定要从队列中获取的消息类型,内核查找队列中匹配类型的第一个到达的消息,如果传0则返回队列最早的消息,不管类型
第五个参数设置成IPC_NOWAIT,如果消息队列没有消息则返回ENOMSG,否则进程将阻塞直到满足条件的消息到达,如果客户等待消息的时候队列被删除则返回EIDRM,如果进程阻塞并等待消息的时候捕获信号则返回EINTR
*/

linux消息队列的使用的更多相关文章

  1. linux消息队列编程实例

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

  2. LINUX消息队列实战之一

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

  3. linux 消息队列的限制

    消息队列的系统限制 作者:冯老师,华清远见嵌入式学院讲师. 消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制.第一:议个消息的最大长度:第二:消息 ...

  4. linux消息队列通信

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

  5. Linux消息队列应用

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

  6. linux消息队列操作

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

  7. Linux消息队列

    #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ms ...

  8. Linux 消息队列编程

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

  9. linux 消息队列

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

随机推荐

  1. Ubuntu 16.04 Vysor 破解 和黑屏问题解决+ 闪屏问题解决

    最新破解更新说明: 参考本人blog: 点我呀 黑屏解决 Vysor使用和黑屏问题 经过了一段时间的艰辛探索,确定是我chrome的PNaCl没有安装,然后又是一段艰辛的Google之后,终于在一个链 ...

  2. JavaScript之延迟加载

    本文参阅http://www.appelsiini.net/projects/lazyload Javascript Lazyload延迟加载特效,有效降低HTPP连接次数,提高首屏加载时间 1.增加 ...

  3. sql server 锁学习

    insert 默认加的锁是 不允许select,update  但是可以insert update 默认加的锁是 不允许 update 可以 select ,insert

  4. asp.net C#生成和解析二维码代码

    类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...

  5. iOS在照片上添加水印

    在做项目的时候我们需要将拍摄的照片做上标记防止图片被他人盗用,所以这就需要在照片的上面加上水印,以表示此照片的独一无二. 加水印不是要在上面添加上几个Label,而是我们要把字画到图片上成为一个整体. ...

  6. ACCESS的System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误

    一直用的是SQL 数据库,突然改用Access了,使用起来就是没有SQL 顺畅,老是出来些意想不到的错误.今天用Access做的网站程序进行添加数据,调试了一下午,总是异常…… 提示ACCESS的Sy ...

  7. 20141030--SQL2008常用命令-1

    create database biao2--创建新的数据库 go use biao2 go create table shuiguo--创建表shuiguo ,create table创建表 ( 序 ...

  8. PowerDesigner提示This data item is already used in a primary identifier.的处理

    原文链接: http://blog.csdn.net/lopper/article/details/5293545 今天同事在编制一个数据库脚本的时候,提示了This data item is alr ...

  9. 8款超酷体验的jQuery/CSS3应用插件

    1.jQuery/CSS3实现Android Dock菜单效果 这是一款基于jQuery和CSS3的Android Dock菜单效果,点击底部的按钮即可让应用图标浮动上来,并且按钮也出现3D的翻转效果 ...

  10. 济南学习 Day1 T1 am

    题意:给你两个日期,问这两个日期差了多少毫秒 #include<cstdio> #include<cstring> #include<ctime> #include ...