Advertisement
ivorakitin

shmem

Dec 18th, 2024 (edited)
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/wait.h>
  5. #include <sys/ipc.h>
  6. #include <sys/shm.h>
  7. #define SHMSIZE 1
  8. #define ARRAY_ELEM 10
  9.  
  10. int main(int argc, char *argv[])
  11. {
  12.     pid_t pid;
  13.     key_t key = ftok(".", 1);
  14.     int shmid = shmget(key, SHMSIZE, IPC_CREAT | 0755);
  15.     char symbol;
  16.     pid = fork();
  17.    
  18.     if (pid == -1)
  19.     {
  20.         perror("fork");
  21.         exit(EXIT_FAILURE);
  22.     }
  23.     else if (pid == 0) //child -> producer
  24.     {
  25.         char *buff = shmat(shmid, NULL, 0);
  26.         for (symbol = 'a'; symbol <= 'z'; symbol++)
  27.         {
  28.             usleep(500);
  29.             *buff = symbol;
  30.             usleep(500);
  31.         }
  32.         shmdt(buff);
  33.     }
  34.     else if (pid > 0) //parent -> consumer
  35.     {
  36.         int i;
  37.         char *buff = shmat(shmid, 0, 0);
  38.         for (int i = 0; i <= 'z' - 'a'; i++)
  39.         {
  40.             usleep(500);
  41.             symbol = *buff;
  42.             printf("%d Received symbol %c\n", (i+1), symbol);
  43.             usleep(500);
  44.         }
  45.         shmdt(buff);
  46.         wait(NULL);
  47.         shmctl(shmid, IPC_RMID, NULL);
  48.     }
  49.     return 0;
  50. }
  51.  
Tags: shmem
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement