Linux IPC消息队列
一、基础概念
IPC(Inter-Process Communication,进程间通信)是Linux系统中进程间交换数据的一种方式。消息队列是IPC的一种机制,它允许一个或多个进程向另一个或多个进程发送消息。消息队列中的消息是按照先进先出(FIFO)的原则进行排列的。
二、优势
三、类型
Linux中的消息队列主要分为两种类型:
四、应用场景
五、常见问题及解决方法
六、示例代码(使用POSIX消息队列)
发送方代码示例(sender.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mqueue.h>
#define QUEUE_NAME "/test_queue"
#define MAX_MSG_SIZE 100
int main() {
mqd_t mq;
struct mq_attr attr;
char buffer[MAX_MSG_SIZE];
// 设置队列属性
attr.mq_flags = 0;
attr.mq_maxmsg = 10;
attr.mq_msgsize = MAX_MSG_SIZE;
attr.mq_curmsgs = 0;
// 创建队列
mq = mq_open(QUEUE_NAME, O_CREAT | O_WRONLY, 0644, &attr);
if (mq == -1) {
perror("mq_open");
exit(1);
}
// 发送消息
strcpy(buffer, "Hello, World!");
if (mq_send(mq, buffer, strlen(buffer) + 1, 0) == -1) {
perror("mq_send");
mq_close(mq);
exit(1);
}
printf("Message sent: %s
", buffer);
// 关闭队列
mq_close(mq);
return 0;
}
接收方代码示例(receiver.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mqueue.h>
#define QUEUE_NAME "/test_queue"
int main() {
mqd_t mq;
char buffer[100];
// 打开队列
mq = mq_open(QUEUE_NAME, O_RDONLY);
if (mq == -1) {
perror("mq_open");
exit(1);
}
// 接收消息
if (mq_receive(mq, buffer, 100, NULL) == -1) {
perror("mq_receive");
mq_close(mq);
exit(1);
}
printf("Message received: %s
", buffer);
// 关闭队列
mq_close(mq);
mq_unlink(QUEUE_NAME); // 删除队列
return 0;
}
云+社区沙龙online[数据工匠]
云+社区沙龙online [腾讯云中间件]
企业创新在线学堂
腾讯云消息队列数据接入平台(DIP)系列直播
云+社区技术沙龙[第1期]
云+社区技术沙龙[第4期]
云+社区技术沙龙[第22期]
云+社区技术沙龙[第10期]
领取专属 10元无门槛券
手把手带您无忧上云