进程间通信2

消息队列

消息队列提供了一个从一个进程向另一个进程发送一块数据的方法。
每个数据块都被认为是有一个类型,接收进程接收的数据块可以有不同的类型值。
消息队列也有管道一样的不足,每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)

cat /proc/sys/kernel/msgmax  #查看

IPC对象数据结构

内核为每个IPC对象维护一个数据结构

struct ipc_perm{	
	key_t  _key;
	uid_t  uid;
	gid_t  gid;
	uid_t  cuid;
	gid_t  cgid;
	unsigned short  mode;
	unsigned short  _seq;

};

消息队列结构

struct msqid_ds
{
	struct ipc_perm  msg_perm;
	time_t  msg_stime;
	time_t  msg_rtime;
	unsigned long  _msg_cbytes;
	msgqnum_t  msg_qnum;
	msglen_t  msg_qbytes;
	pid_t  msg_lspid;
	pid_t  msg_lrpid;
};

消息队列在内核中的表示

消息队列函数

#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);

功能:用来创建和访问一个消息队列
原型
int msgget(key_t key,int msgflg);
参数
key:某个消息队列的名字
msgflg:由九个权限标志构成,
返回值:成功返回一个非负整数,即该消息队列的标识码;失败返回-1

功能:消息队列的控制函数
原型
int msgctl(int msqid,int cmd,struct msqid_ds *buf);
参数:
msgid:由msgget函数返回的消息队列标识码
cmd:是将要采取的动作
返回值:成功返回0,失败返回-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值