ipc--消息队列

本文详细介绍了 System V 消息队列这一进程间通信方式的特点与使用方法,包括 ftok 函数生成 IPC 键的过程、msgget 创建或打开消息队列的方法,以及 msgsnd 和 msgrcv 的消息传递机制。

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

消息队列也是一种进程间通信的方式,systemV 消息队列被大量使用
特点:
1.消息队列面向数据块
2.ipc生命周期不是随进程的(进程退出则退出),系统中若创建IPC,若不显式删除,则一直存在,是随内核的(用命令行删除或者重启系统)
3.消息类型队列和管道不同的就是它没有谁进谁出的规定,是半双工的
4.消息队列是操作系统提供的第三方进程,完成双向通信


消息队列
ftok函数
     函数ftok把一个已存在的路径和一个整数标识转换成一个key_t 值,称为IPC键

返回值:

msgget函数
     msgget函数  用于创建一个新的或者打开一个已经存在的消息队列,这个消息队列与key相对应。
     key:函数ftok返回值或IPC_PRIVATE
     msgflag:IPC_CREAT创建新的消息队列;IPC_EXCL表示若创建的消息队列已经存在,则错误返回

返回值

关于msgget的参数msgflg,IPC_CREAT标识当文件不存在时创建,IPC_EXCL表示当文件存在时出错返回。


关于msgctl 函数
     msgctl函数对msqid标识的消息队列执行cmd操作

关于cmd
     1.IPC_STAT:读取消息队列的数据结构msqid_ds,并将其存储在buf指定的地址
     2.IPC_SET:设置消息队列的数据结构msqid_ds中的ipc_perm元素值,这个值取自buf
     3.IPC_RMID:从系统内核中移走消息队列
返回值


函数 msgsnd 和函数 msgrcv
     msgsnd和msgrcv是linux系统中异步或进程间通信的一种机制。msgrcv从消息队列中读取消息,msgsnd将消息写入队列。
     参数     msqid:消息队列的识别码
                 msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可以定义的通用结构struct msgbuf{long mtype;/*消息类型,>0*/char mtext[1];/*消息文本*/};
               msgsz消息大小
               msgflg:控制函数行为标志(0表示忽略)

返回值

进程通信的实现:
server.c

client.c

comm.h

comm.c




ipcs -q查询消息队列

当server和client进程都退出后,这个消息队列仍存在,需要手动删除
ipcrm -q msqid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值