90做网站,商务电子是学什么的,dede 网站目录,动漫制作这个专业怎么样C进程间通信 消息队列 消息队列概述消息队列代码示例1. 创建和发送消息的程序#xff08;sender.cpp#xff09;2. 接收消息的程序#xff08;receiver.cpp#xff09; 代码解释运行步骤运行结果 消息队列概述
消息队列是一种进程间通信机制#xff0c;允许一个或多个进程… C进程间通信 消息队列 消息队列概述消息队列代码示例1. 创建和发送消息的程序sender.cpp2. 接收消息的程序receiver.cpp 代码解释运行步骤运行结果 消息队列概述
消息队列是一种进程间通信机制允许一个或多个进程通过消息的形式进行通信。消息队列可以在内核中维护提供了一个先进先出的队列支持消息的优先级排序。
消息队列代码示例
1. 创建和发送消息的程序sender.cpp
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
#include iostream
#include cstring
#include cstdlib#define MSGQ_KEY 1234
#define MSG_SIZE 128struct message
{long msg_type;char msg_text[MSG_SIZE];
};int main()
{int msgid msgget(MSGQ_KEY, 0666 | IPC_CREAT); // 创建消息队列if (msgid -1) {perror(msgget);exit(EXIT_FAILURE);}message msg;msg.msg_type 1; // 消息类型strcpy(msg.msg_text, Hello from sender process!); // 消息内容if (msgsnd(msgid, msg, sizeof(msg.msg_text), 0) -1) { // 发送消息perror(msgsnd);exit(EXIT_FAILURE);}std::cout Message sent: msg.msg_text std::endl;return 0;
}2. 接收消息的程序receiver.cpp
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
#include iostream
#include cstring
#include cstdlib#define MSGQ_KEY 1234
#define MSG_SIZE 128struct message
{long msg_type;char msg_text[MSG_SIZE];
};int main()
{int msgid msgget(MSGQ_KEY, 0666 | IPC_CREAT); // 获取消息队列if (msgid -1) {perror(msgget);exit(EXIT_FAILURE);}message msg;if (msgrcv(msgid, msg, sizeof(msg.msg_text), 1, 0) -1) { // 接收消息perror(msgrcv);exit(EXIT_FAILURE);}std::cout Message received: msg.msg_text std::endl;if (msgctl(msgid, IPC_RMID, nullptr) -1) { // 删除消息队列perror(msgctl);exit(EXIT_FAILURE);}return 0;
}代码解释 创建和发送消息的程序sender.cpp msgget(MSGQ_KEY, 0666 | IPC_CREAT): 创建一个消息队列如果消息队列不存在则创建否则获取现有的消息队列。定义一个message结构包含消息类型和消息文本。设定消息类型并赋值消息文本。msgsnd(msgid, msg, sizeof(msg.msg_text), 0): 发送消息到消息队列。打印发送的消息。 接收消息的程序receiver.cpp msgget(MSGQ_KEY, 0666 | IPC_CREAT): 获取消息队列。定义一个message结构包含消息类型和消息文本。msgrcv(msgid, msg, sizeof(msg.msg_text), 1, 0): 从消息队列接收类型为1的消息。打印接收到的消息。msgctl(msgid, IPC_RMID, nullptr): 删除消息队列。
运行步骤
分别编译sender.cpp和receiver.cppg sender.cpp -o sender
g receiver.cpp -o receiver打开两个终端在第一个终端运行接收程序./receiver在第二个终端运行发送程序./sender运行结果
第一个终端运行接收程序输出
Message received: Hello from sender process!第二个终端运行发送程序输出
Message sent: Hello from sender process!