进程通信之消息队列

本文介绍了Linux消息队列的概念及其作为进程间通信的一种方式。内容包括消息队列的结构、如何通过ftok函数转化文件名得到键值、msgget函数创建消息队列、msgsnd函数写入消息、msgrcv函数读取消息以及msgctl函数控制消息队列。还提到了消息队列的操作类型、API函数的参数说明及返回值,并指出每个消息队列的容量和最大消息数有限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。

消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消息队列中消息数目等,甚至记录了最近对消息队列读写进程的ID。读者可以访问这些信息,也可以设置其中的某些信息。

  全局数据结构struct ipc_ids msg_ids可以访问到每个消息队列头的第一个成员struct kern_ipc_perm能够与具体的消息队列对应起来是因为在该结构中,有一个key_t类型成员key,而key则确定一个消息队列。

  消息队列的操作有以下三种类型。

  1.打开或者创建消息队列

  2.读写操作

  3.获得或者设置消息队列属性。

  消息队列的API函数

  ftok函数:

  作用:将文件名转化为键值

  函数原型:key_t fotk(char *pathname ,char proj)

  返回值:返回与文件对应的键值

  2.msgget函数

  作用:创建消息队列

  原型:int msgget(key_t key,int msgflg)

  参数:键值和权限,是可读还是可写,IPC_PRIVATE,设定一个数字,也可以由tok函数获得

  返回值:成功则是消息队列的id,出错-1

  包含的头文件:#include <sys/types.h>

                &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值