Linux的进程编程-之二-进程间通信(消息队列)

本文详细介绍了Linux系统V消息队列和Posix消息队列的使用,包括ftok(), msgget(), msgrcv(), msgsnd(), msgctl()等系统调用,以及mq_open(), mq_close(), mq_unlink(), mq_notify()等Posix消息队列操作。通过这些函数,开发者可以实现进程间的通信和消息传递。" 120063150,10060960,跨越速运与StarRocks:统一查询引擎提升数据分析速度,"['大数据', '运维', '数据库', 'OLAP']
摘要由CSDN通过智能技术生成

1.1         系统V消息队列

消息队列中的每个消息都有如下的数据结构:

struct msgbuf

{

long mtype;         // 消息类型

char mtext[n];      // 消息内容,n由用户自己定义

};

1.1.1       ftok( )

#include<sys/types.h>

#include<sys/ipc.h>

key_tftok( const char *name, int id )

参数name指定了文件名(包含路径),该文件必须存在,而且当前进程必须能够访问该文件。

参数id只有低8位有效。

只有当name和id取值都相同时,返回的键值key才是相同的。

成功返回键值,失败返回-1。

1.1.2       msgget( )

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/msg.h>

intmsgget( key_t key, int msgflg )

创建或获取消息队列;成功返回与key相关联的消息队列id,失败返回-1。

参数msgflg可以取IPC_CREAT、IPC_EXCL、IPC_NOWAIT。

单独使用IPC_CREAT,如果不存在与键值key相关联的消息队列,就创建一个新的消息队列,并返回其id,如果已经存在与键值key相关联的消息队列,就返回该消息队列的id。

单独使用IPC_EXCL是没有意义的,如果IPC_EXCL和IPC_CREAT一起使用,当与键值key相关联的消息队列已经存在时,就失败返回-1。

下面两种情况会创建一个新的消息队列:

1.参数msgflg指定IPC_CREAT,而且没有消息队列与键值key相关联;

2.参数key指定IPC_PRIVATE;

参数msgflg的低9位指定新创建消息队列的访问权限:

所有者

组成员

其他成员

执行

执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值