消息队列(System V)
作用
从一个进程向另外一个进程发送一个带有类型的数据块
本质
是存储在内核中的一个消息的队列(链表)
特点
- 每个数据块都被认为有一个类型,接受者进程接收的数据块可以有不同的类型值
- 和管道一样,每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总字节数也是有上限的(MSGMNB),系统上的消息队列总数也是有上限的(MSGMNI)
- 是一个全双工通信,可读可写。
- 生命周期随内核
查看消息队列: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 */
__kernel_time_t msg_stime; /* last msgsnd time */
__kernel_time_t msg_rtime; /* l

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

被折叠的 条评论
为什么被折叠?



