msgrcv
是一個(gè)用于接收消息隊(duì)列中消息的 Linux 系統(tǒng)調(diào)用
以下是使用 msgsnd
和 msgrcv
實(shí)現(xiàn)進(jìn)程間同步操作的簡(jiǎn)單示例:
#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;
}
請(qǐng)注意,這只是一個(gè)簡(jiǎn)單的示例,實(shí)際應(yīng)用中可能需要更復(fù)雜的同步機(jī)制。在實(shí)際項(xiàng)目中,你可能還需要考慮錯(cuò)誤處理、多線程同步等問(wèn)題。