linux c 实现消息队列
时间: 2023-12-27 18:03:53 浏览: 80
linux c消息队列实现
5星 · 资源好评率100%
在 Linux C 中,我们可以使用 System V IPC 机制来实现消息队列。
实现步骤如下:
1. 创建一个消息队列。
```
int msgget(key_t key, int msgflg);
```
其中,key 是一个标识符,用于标识消息队列。msgflg 是一个标志,用于指定操作模式。
2. 发送消息到消息队列。
```
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
```
其中,msqid 是消息队列的标识符,msgp 是指向消息的指针,msgsz 是消息的大小,msgflg 是一个标志,用于指定操作模式。
3. 接收消息从消息队列。
```
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
```
其中,msqid 是消息队列的标识符,msgp 是接收消息的缓冲区,msgsz 是缓冲区的大小,msgtyp 是消息类型,msgflg 是一个标志,用于指定操作模式。
4. 删除消息队列。
```
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
```
其中,msqid 是消息队列的标识符,cmd 是一个指令,用于指定要执行的操作,buf 是一个指向 msqid_ds 结构的指针,用于传递命令所需的参数。
以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf {
long mtype;
char mtext[256];
};
int main() {
key_t key = ftok(".", 'a');
int msqid = msgget(key, IPC_CREAT | 0666);
struct msgbuf msg;
msg.mtype = 1;
strcpy(msg.mtext, "Hello, world!");
msgsnd(msqid, &msg, strlen(msg.mtext) + 1, 0);
msgrcv(msqid, &msg, sizeof(msg.mtext), 1, 0);
printf("Received message: %s\n", msg.mtext);
msgctl(msqid, IPC_RMID, NULL);
return 0;
}
```
阅读全文