The contents of this page are licensed under the following license
Operating System

IPC message queues
 #include <sys/types.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 struct msgbuf
 {
   long mtype;
   char mtext[100];
 };

 int main()
 {
   int msgid;
   int foo;
   struct msgbuf msg;

   /* create message queue and get identifier */
   msgid = msgget(0x13, 0600 | IPC_CREAT | IPC_EXCL);
   if (!msgid)
   {
     msgid = msgget(0x13, 0600 | IPC_CREAT);
     if (!msgid)
     {
       perror("Error create message queue");
       exit(1);
     }
   }

   msg.mtype = 1;
   strcpy(msg.mtext, "Hello!");

   /* append a copy of message to the message queue */
   foo = msgsnd(msgid, &msg, sizeof(msg.mtext), 0);
   if (foo < 0) perror("Error send message");

   strcpy(msg.mtext, "");

   /* read a message from the message queue */
   foo = msgrcv(msgid, &msg, sizeof(msg.mtext), 1, 0);
   if (foo < 0) perror("Erorr read message");

   printf("Message [type=%d]: %s\n", msg.mtype, msg.mtext);

   /* remove the message queue */
   msgctl(msgid, IPC_RMID, 0);
 }

August, 23rd 2006 © Michał Kalewski