进程间通信笔记(二)

消息队列

消息队列是一种通过链表结构组织的一组消息,消息是链表中具有一定格式及优先级的数据记录。消息队列与其他两种进程间通信对象(共享内存,信号量)相同,都存放在内核中,多个进程通过消息队列的标识符对消息数据进行传送,实现进程间的通信。

每个消息队列都有与之对应的结构,用于定义一个消息队列的对象。结构体类型定义(部分关键)

struct msqid_ds{
struct ipc_perm msg_perm;//消息队列指向ipc_perm结构的指针
struct msg *msg_first;//指向消息队列的第一个消息的指针
struct msg *msg_last;//指向消息队列的最后一个消息的指针
uLONG msg_ctypes;//当前消息队列的总字节数
ulong msg_qunm;//总消息数量
ulong msg_qbytes;//消息队列中字节数的上线
pid_t msg_lspid;//最后一个调用msgnd()函数的进程ID
pid_t msg_lrpid;//最后一个调用msrcv()函数的进程ID
time_t msg_stime;//最后一次调用msgnd()函数的时间
time_t msg_rtime;//最后一次调用msrcv()函数的时间
time_t msg_ctime;//最后一次改变该消息队列的时间
};

消息队列的相关操作

使用消息队列时间进程间通信,首先要调用msgget()函数创建一个消息队列,然后调用msgsnd()函数对该消息队列中发送指定的消息,通过msgrcv()函数接收数据,最后调用msgctl()函数对消息队列进行指定的控制操作。

msgget()函数

用于创建一个新的消息队列或者打开一个已经存在的消息队列

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgget(key_t key,int msgflg);
  • key:表示创建的消息队列的键值
  •  msgflg:用去设置消息队列的访问权限,也可以表示该函数的操作类型

调用成功,返回与key相关联的标识符;失败,返回-1

调用msgget()函数创建一个消息队列时,与消息队列相对应的msqid_ds结构体中的成员变量会被初始化。

msgsnd()函数

用于向消息队列发送消息

#include<sys/types.h>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值