#include <stdio.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/msg.h> #define BUFF_LEN 20 struct msg { int index; char msgQueue[BUFF_LEN]; }; int main(int argc, char **argv) { int pid; int ret; int num; int msg_id; msg_id = msgget((key_t)9527, IPC_CREAT); if (msg_id < 0) { fprintf(stderr, "Create msgQueue failed, line: %d\n", __LINE__); return -1; } pid = fork(); if (pid < 0) { fprintf(stderr, "Create fork failed, line: %d\n", __LINE__); return -1; } if (pid == 0) { struct msg msg; msg.index = 1; num = 1; while (1) { sprintf(msg.msgQueue, "hello, %d\n", num); num++; msg.index++; ret = msgsnd(msg_id, &msg, sizeof(msg), 0); if (ret < 0) { fprintf(stderr, "Send msg failed, line: %d\n", __LINE__); return -1; } sleep(1); } } else { struct msg msg; while (1) { ret = msgrcv(msg_id, &msg, sizeof(msg), 0, 0); if (ret < 0) { printf("Recive msg failed, line: %d\n", __LINE__); return -1; } sleep(2); printf("index = %d\nMsgQueue%s\n", msg.index, msg.msgQueue); } } return 0; |
|