本文介绍: IPCLinux消息队列是一种在进程传递消息数据结构。它允许一个进程一条消息放入队列,而其他进程可以队列中取出并处理消息消息队列实现进程间通信(IPC)方面非常有用。IPC。

Linux消息队列是一种在进程间传递消息数据结构。它允许一个进程将一条消息放入队列,而其他进程可以从队列中取出并处理消息。消息队列在实现进程间通信(IPC)方面非常有用。

IPC对象

IPC(InterProcess Communication) 对象是活动在内核级别的一种进程间通信工具。IPC对象可以是消息队列、信号量共享存储器中的任意一种类型。IPC对象通过标识符引用访问,这个标识符一个非负整数,它唯一标识一个IPC对象。在Linux系统中,IPC对象的标识符声明为整数,所以可能存在最大标识符为65535。IPC对象删除创建时相应的标识符的值会不断增加到最大的值,归零循环分配使用。如果用户需要使用IPC对象进行进程之间的通信,首先必须要为IPC对象申请对应资源key值、ID号)。例如使用消息队列来通信,那么就必须为消息队列申请key值与ID号。

查看IPC对象。

命令ipcs [-asmq]

选项 功能
a 查看全部IPC对象信息
m 查看共享内存
-q 查看消息队列
s 查看信号量

ftok函数原型

#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(char* filename, int id);

参数说明

返回值

消息队列

消息队列(Message Queue)是一种进程间通信或同一进程的不同线程通信方式软件的贮列用来处理系列输入,通常是来自用户。消息队列提供了异步通信协议,每一个贮列中纪录包含详细说明的数据包含发生的时间输入设备的种类,以及特定的输入参数。消息队列中的消息是先进先出(FIFO)的数据结构,也就是说,最先进入队列的消息将会最先被取出每个消息队列都有一个最大长度,一旦达到最大长度,后续的入队操作将会失败。

消息队列是在消息的传输过程保存消息的容器。它允许应用程序通过发送接收消息来进行通信,这些消息按照它们到达的顺序存储在队列中。消息队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

消息队列在分布式系统中扮演着重要的角色,它们允许不同的应用程序或不同的组件之间进行通信协作通过使用消息队列,应用程序可以解耦和异步处理数据流,从而提高系统的可靠性性能

消息队列是:

消息结构

消息结构模板msgbuf

struct msgbuf
{
	long msgtype; // 消息的类型, 长整型变量
	char mtext[1]; // 消息的内容字符串数组
}

结构只是一个模板,在实际的编程中,可以根据该模板自行定义消息的长度

消息队列通信步骤

  1. 创建消息队列 msgget()
  2. 向消息队列发送消息 msgsnd()
  3. 从消息队列读取消息 msgrcv()
  4. 删除消息队列 msgctl()

msgget()

函数原型

#include <sys/types.h>
#include <sys/msg.h&gt;
int msgget(key_t key, int flags);

参数说明:

返回值

msgsnd()

函数原型

#include <sys/types.h>
#include <sys/msg.h>
int msgsnd(int msqid, struct msgbuf* msgp, size_t size, int flag);

参数说明:

返回值

  • 调用成功,返回0
  • 调用失败,返回-1

msgrcv()

函数原型:

#include <sys/types.h>
#include <sys/msg.h>
int msgrcv(int msqid, struct msgbuf* msgp, size_t size, long type, int flag);

参数说明:

返回值:

  • 调用成功,返回实际读取到的消息的字节
  • 调用失败,返回-1

msgctl()

函数原型:

#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds* buf);

参数说明:

返回值:

  • 调用成功,返回0
  • 调用失败,返回-1

原文地址:https://blog.csdn.net/qq_63432403/article/details/134757702

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27906.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注