进程间通信方式——消息队列

本文深入探讨了Linux系统V消息队列,包括其作用、本质、特点和使用方法。介绍了msgget、msgrcv、msgsnd、msgctl等关键函数,并展示了如何用消息队列实现简单的客户端-服务器通信。通过示例代码,读者可以了解到如何创建、发送、接收和管理消息队列。
摘要由CSDN通过智能技术生成

消息队列(System V)

作用

从一个进程向另外一个进程发送一个带有类型的数据块

本质

是存储在内核中的一个消息的队列(链表)

特点

  1. 每个数据块都被认为有一个类型,接受者进程接收的数据块可以有不同的类型值
  2. 和管道一样,每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总字节数也是有上限的(MSGMNB),系统上的消息队列总数也是有上限的(MSGMNI)
  3. 是一个全双工通信,可读可写。
  4. 生命周期随内核

查看消息队列:ipcs -q

IPC对象数据结构:/usr/include/linux/ipc.h

struct ipc_perm 
{ 
    __kernel_key_t  key; 
    __kernel_uid_t  uid; 
    __kernel_gid_t  gid; 
    __kernel_uid_t  cuid; 
    __kernel_gid_t  cgid; 
    __kernel_mode_t mode;  
    unsigned short  seq; 
};

消息队列结构:/usr/include/linux/msg.h  

struct msqid_ds {
	struct ipc_perm    msg_perm;
	struct msg         *msg_first;		/* first message on queue,unused  */
	struct msg         *msg_last;		/* last message in queue,unused */
	unsigned short     msg_qnum;	/* number of messages in queue */
	unsigned short     msg_qbytes;	/* max number of bytes on queue */
	__kernel_ipc_pid_t msg_lspid;	/* pid of last msgsnd */
	__kernel_ipc_pid_t msg_lrpid;	/* last receive pid */
	__kerne
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值