3.1 概述

消息队列结构:

struct msqid_ds
{
struct ipc_perm msg_perm; //权限结构
struct msg *msg_first; //队列中第一个消息
struct msg *msg_last; //队列中最后一个消息
msglen_t msg_cbytes; //队列中当前消息总字节数
msglen_t msg_qbytes; //队列中最大消息总字节数
msgqnum_t msg_qnum; //队列中当前消息数
pid_t msg_lspid; //最后发送消息进程
pid_t msg_lrpid; //最后接收消息进程
time_t msg_stime; //最后发送时间
time_t msg_rtime; //最后接收时间
time_t msg_ctime; //最后修改时间
};

内核中消息队列结构:

6.2 msgget函数

#include <sys/msg.h>
int msgget(key_t key,int oflag)

oflag:0x0400|0x0200 | 0x0040|0x0020 | 0x0004|0x0002 | IPC_CREAT | IPC_EXCL

创建一个消息队列时:

msg_perm中的uid、gid、cuid、cgid依据调用进程来初始化

msg_perm中的mode依据oflag进行初始化

msg_qnum、msg_lspid、msg_lrpid、msg_stime、msg_rtime置为0

msg_ctime置为当前时间

msg_qbytes设置为系统限制值

6.3 msgsnd函数

#include <sys/msg.h>
int msgsnd(int msqid,void *ptr,size_t len,int flag)

ptr一般是自定义的消息结构

struct mymsg
{
long type;
char text[LEN];
};

len:mymsg结构中类型字段之后的数据长度

falg:IPC_NOWAIT 非阻塞msgsnd(msgsnd不能向队列中写消息时,阻塞还是出错返回的控制位),也可以置为0

6.4 msgrcv函数

#include <sys/msg.h>
ssize_t msgrcv(int msqid,void *ptr,size_t len,long type,int flag)

ptr:接收数据缓冲区

len:缓冲区长度

type:接收的消息类型

0:接收队列中第一个消息

大于0:接收type类型的消息

小于0:接收类型值小于等于|type|的消息中类型值最小的第一个消息

flag:在消息队列中没有指定消息类型时,出错返回还是阻塞

6.5 msgctl函数

#include <sys/msg.h>
int msgctl(int msgid,int cmd,struct msqid_ds *buf)

IPC_STAT:将某个消息队列的信息写到buf中

IPC_SET:按照buf中的mag_perm.uid,msg_perm.gid、msg_perm.mode和msg_qbytes修改消息队列对应项

IPC_RMID:buf忽略,删除消息队列

System V 消息队列的更多相关文章

  1. 进程间通信 System V 消息队列

    1.msgget (key_t ket,int flag) ; //创建一个新的消息队列或者访问一个已存在的消息队列 2.msgsnd(int msid, const void *ptr ,size_ ...

  2. 第6章 System V消息队列

    6.1 概述 System V消息队列在内核中是list存放的,头结点中有2个指针msg_first 和msg_last.其中每个节点包含:下个节点地址的指针.类型.长度.数据等. 6.2 函数 6. ...

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

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

  4. 利用System V消息队列实现回射客户/服务器

    一.介绍 在学习UNIX网络编程 卷1时,我们当时可以利用Socket套接字来实现回射客户/服务器程序,但是Socket编程是存在一些不足的,例如: 1. 服务器必须启动之时,客户端才能连上服务端,并 ...

  5. UNIX环境高级编程——system V消息队列

    unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的.     消息队列(也叫报文队列)客服了这些缺点:     消息队列就是一个消息的链表.     可以把消 ...

  6. linux c编程:System V消息队列一

    消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识.具有足 够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息.在某个进 ...

  7. 第二十五章 system v消息队列(一)

    IPC对象的持续性 随进程持续 :一直存在直到打开的最后一个进程结束.(如pipe和FIFO) 随内核持续 :一直存在直到内核自举(内核自举就是把主引导记录加载到内存,并跳转执行这段内存)或显示删除( ...

  8. linux网络编程之system v消息队列(二)

    今天继续学习system v消息队列,主要是学习两个函数的使用,开始进入正题: 下面则开始用代码来使用一下该发送函数: 在运行之前,先查看一下1234消息队列是否已经创建: 用上次编写的查看消息队列状 ...

  9. Linux IPC System V 消息队列

    模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> ftok() //获取key ...

  10. System V消息队列

    消息的基本属性 System V的消息属性包含在一个msqid_ds的结构中 struct msqid_ds{ struct ipc_cerm msg_perm; //读取权限, 0644, 0777 ...

随机推荐

  1. 解决Hadoop-Eclipse-Plugin放在Plugin目录下没反应的问题

    有时候自己编译或者下载的Hadoop-Eclipse-Plugin放到Eclipse的Plugin目录下面,启动Eclipse没有反应,即看不到小象和Map/Reduce视图.可以通过查看Eclips ...

  2. 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)

    赛后当天学长就说了树状数组,结果在一个星期后赖床时才有了一点点思路…… 因为无法提交,不确定是否正确..嗯..有错希望指出,谢谢... 嗯..已经A了..提交地址http://acm.uestc.ed ...

  3. 成都Uber优步司机奖励政策(2月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 数据绑定之DataFormatString

    设定BoundField的DataFormatString,通常有以下几种 DataFormatString= "{0:C}" 货币,货币的格式取决于当前Thread中Cultur ...

  5. 推送通知/传感器/UIDynamic仿真(推送通知已适配iOS10)

    推送通知/传感器/UIDynamic 一.推送通知 1.推送通知简介 什么是推送通知 此处的推送通知与NSNotification没有任何关系 可以理解为,向用户推送一条信息来通知用户某件事情 作用: ...

  6. uva 1422 - Processor(二分+优先队列)

    题目链接:uva 1422 - Processor 题目大意:有一个机器要处理一些问题,给出这些问题可以开始的时间和必须完成的时间,以及任务的工作量,问说机器必须以最少每秒多少得工作量才能完成这些任务 ...

  7. HTML几类标签的应用总结

    打开DREAMWEAVER,新建HTML,如下图: body的属性: bgcolor 页面背景色 background  背景壁纸.图片 text  文字颜色 topmargin  上边距 leftm ...

  8. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  9. cocos2d-x 的CCObject与autorelease 之深入分析

    转自: http://blog.csdn.net/honghaier/article/details/8160519 CCObject.h: #ifndef __CCOBJECT_H__ #defin ...

  10. 解锁Dagger2使用姿势(二) 之带你理解@Scope

    关于Dagger2使用的基础如果你还不了解,可以参考我的上一篇文章解锁Dagger2使用姿势(一),这有助于你理解本篇文章. OK,我们在上篇文章介绍另外Dagger2使用过程中四个基本的注解,分别是 ...