/********************************************************************************* * Copyright: (C) 2025 LingYun IoT System Studio * All rights reserved. * * Filename: mq_recv.c * Description: This file is Message Queue(receiver) example program. * * Version: 1.0.0(11/10/2025) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "11/10/2025 10:06:53 AM" * ********************************************************************************/ #include #include #include #include #include #include #include #include #define FTOK_PATH "/dev/zero" #define FTOK_PROJID 0x22 typedef struct msg_s { long mtype; char mtext[512]; } msg_t; int main(int argc, char **argv) { key_t key; msg_t msg; int msgid; int msgtype=2; int i; if( (key=ftok(FTOK_PATH, FTOK_PROJID)) < 0 ) { printf("ftok() get IPC token failure: %s\n", strerror(errno)); return -1; } msgid = msgget(key, IPC_CREAT|0666); if( msgid < 0) { printf("shmget() create shared memroy failure: %s\n", strerror(errno)); return -2; } printf("key[%d] msgid[%d] msgypte[%d]\n", (int)key, msgid, msgtype); printf("Waiting for messages...\n"); while(1) { memset(&msg,0,sizeof(msg)); if( msgrcv(msgid, &msg, sizeof(msg.mtext), msgtype, 0) < 0 ) { printf("msgsnd() receive message failure: %s\n", strerror(errno)); break; } printf("Received: %s", msg.mtext); if (strncasecmp(msg.mtext, "exit", 4) == 0) break; } msgctl(msgid, IPC_RMID, NULL); return 0; }