System V 消息队列
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 消息队列的更多相关文章
- 进程间通信 System V 消息队列
1.msgget (key_t ket,int flag) ; //创建一个新的消息队列或者访问一个已存在的消息队列 2.msgsnd(int msid, const void *ptr ,size_ ...
- 第6章 System V消息队列
6.1 概述 System V消息队列在内核中是list存放的,头结点中有2个指针msg_first 和msg_last.其中每个节点包含:下个节点地址的指针.类型.长度.数据等. 6.2 函数 6. ...
- Linux进程通信之System V消息队列
System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...
- 利用System V消息队列实现回射客户/服务器
一.介绍 在学习UNIX网络编程 卷1时,我们当时可以利用Socket套接字来实现回射客户/服务器程序,但是Socket编程是存在一些不足的,例如: 1. 服务器必须启动之时,客户端才能连上服务端,并 ...
- UNIX环境高级编程——system V消息队列
unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的. 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表. 可以把消 ...
- linux c编程:System V消息队列一
消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识.具有足 够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息.在某个进 ...
- 第二十五章 system v消息队列(一)
IPC对象的持续性 随进程持续 :一直存在直到打开的最后一个进程结束.(如pipe和FIFO) 随内核持续 :一直存在直到内核自举(内核自举就是把主引导记录加载到内存,并跳转执行这段内存)或显示删除( ...
- linux网络编程之system v消息队列(二)
今天继续学习system v消息队列,主要是学习两个函数的使用,开始进入正题: 下面则开始用代码来使用一下该发送函数: 在运行之前,先查看一下1234消息队列是否已经创建: 用上次编写的查看消息队列状 ...
- Linux IPC System V 消息队列
模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> ftok() //获取key ...
- System V消息队列
消息的基本属性 System V的消息属性包含在一个msqid_ds的结构中 struct msqid_ds{ struct ipc_cerm msg_perm; //读取权限, 0644, 0777 ...
随机推荐
- iOS开发:UIImageView常用操作
UIImageView,顾名思义,是用来放置图片的.使用Interface Builder设计界面时,当然可以直接将控件拖进去并设置相关属性,这就不说了,这里讲的是用代码. 1.创建一个UIImage ...
- WPF-21:WPF实现仿安卓的图案密码键盘(改进)
前面写了个简单的实现( http://blog.csdn.net/yysyangyangyangshan/article/details/9280439),不过效果不太好,各个点之间没有连接起来.这里 ...
- 收集磁盘分区信息(总量、可用、已用、百分比)导出到csv
#############################脚本功能及说明##################################################该脚本用来收集磁盘分区总大小 ...
- Oracle Outline总结
一.基本概述 Oracle Outline,中文也称为存储大纲,是最早的基于提示来控制SQL运行计划的机制.也是9i以及之前版本号唯一能够用来稳定和控制SQL运行计划的工具. outline是一个hi ...
- java对空格的处理
public static void main(String[] args) { // TODO Auto-generated method stub String a = " 这个前面有两 ...
- ThinkPHP中的动态缓存(S方法)和快速缓存(F方法)(转)
系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache) 对于File方式缓存下的缓存 ...
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing--转
原文:http://blog.csdn.net/sunny2038/article/details/6926079 最近在看Java,在编译写书上一个例子时,由于书上的代码只有一部分,于是就自己补了一 ...
- How to add route for IPV6 interface
Firewall : ifconfig eth1 inet6 add 2000::1/64 ifconfig eth4 inet6 add 5000::1/64 ------------------- ...
- Matlab 之 im2col
函数原型:B = im2col(A,[m n],block_type) 功 能:将矩阵A分为m×n的子矩阵,再将每个子矩阵作为B的一列. (1)当block_type为distinct时 ...
- iOS之Sqlite和FMDB
在iOS 开发中,总会用到数据库的操作,来实现增.删.改.查. 尤其是查询. 一旦涉及到查询的操作,那就非得用数据库不可了. SQLite (http://www.sqlite.org/docs. ...