msgrcv 是一个用于接收消息队列中消息的 Linux 系统调用
以下是使用 msgsnd 和 msgrcv 实现进程间同步操作的简单示例:
#include<stdio.h>#include <stdlib.h>#include <sys/ipc.h>#include <sys/msg.h>#include <sys/types.h>#include <unistd.h>typedef struct { long mtype; char mtext[100];} Message;创建一个生产者进程,该进程将消息发送到消息队列:int main() { key_t key = ftok("/tmp", 123); int msgid = msgget(key, IPC_CREAT | 0666); if (msgid == -1) { perror("msgget"); exit(1); } Message message; message.mtype = 1; sprintf(message.mtext, "Hello from producer!"); if (msgsnd(msgid, &message, sizeof(message.mtext), 0) == -1) { perror("msgsnd"); exit(1); } printf("Producer sent message: %s\n", message.mtext); return 0;}创建一个消费者进程,该进程从消息队列中接收消息:int main() { key_t key = ftok("/tmp", 123); int msgid = msgget(key, 0); if (msgid == -1) { perror("msgget"); exit(1); } Message message; message.mtype = 1; if (msgrcv(msgid, &message, sizeof(message.mtext), 1, 0) == -1) { perror("msgrcv"); exit(1); } printf("Consumer received message: %s\n", message.mtext); return 0;}编译并运行这两个程序。首先运行生产者进程,然后运行消费者进程。你会看到消费者进程接收到了生产者进程发送的消息。请注意,这只是一个简单的示例,实际应用中可能需要更复杂的同步机制。在实际项目中,你可能还需要考虑错误处理、多线程同步等问题。


