ivorakitin

IPC Message Queues

Dec 12th, 2025
77
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <sys/ipc.h>
  6. #include <sys/msg.h>
  7. #include <sys/wait.h>
  8.  
  9.  
  10. typedef struct msgbuf
  11. {
  12.     long mtype;
  13.     char mtext[100];
  14.     int pid;
  15.     double data;
  16. } message;
  17.  
  18. int main()
  19. {
  20.     key_t key = ftok(".", 1);
  21.     int msgid = msgget(key, IPC_CREAT | 0755);
  22.  
  23.     pid_t pid;
  24.     pid = fork();
  25.  
  26.     if (pid == -1)
  27.     {
  28.         perror("fork");
  29.         exit(EXIT_FAILURE);
  30.     }
  31.     else if (pid == 0)
  32.     {
  33.         message msg;
  34.         for (int i = 0; i < 10; i++)
  35.         {
  36.             msg.mtype = (i % 2) + 1;
  37.         //msg.mtype = 1;
  38.         msg.pid = getpid();
  39.         msg.data = i * 3.1415;
  40.         strcpy(msg.mtext, "Hello");
  41.         msgsnd(msgid, (message*) &msg, sizeof(msg), 0);
  42.         }
  43.     }
  44.     else if (pid > 0)
  45.     {
  46.         message msg;
  47.         wait(NULL);
  48.         for (int i = 0; i < 10; i++)
  49.         {
  50.         msgrcv(msgid, (message*) &msg, sizeof(msg), 1, IPC_NOWAIT);
  51.         //msgrcv(msgid, (message*) &msg, sizeof(msg), 1, 0);
  52.         printf("Parent pid: %d\n", getpid());
  53.         printf("Message received: %s %lf\n", msg.mtext, msg.data);
  54.         printf("Child PID: %d\n", msg.pid);
  55.         }
  56.     }
  57.     return 0;
  58. }
  59.  
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment