Tobiahao

S01_PAMIEC_DZIELONA_02

Dec 19th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.33 KB | None | 0 0
  1. /*
  2. Stwórz obszar pami ę ci dzielonej, z którego b ę d ą korzystać trzy procesy. Zorganizuj
  3. dost ę p do tej pami ę ci tak, aby procesy mia ł y do niej dost ę p w ś ci ś le okre ś lonej kolej-
  4. no ś ci. Postaraj si ę nie u ż ywa ć semaforów.
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <sys/ipc.h>
  10. #include <sys/types.h>
  11. #include <sys/shm.h>
  12. #include <unistd.h>
  13. #include <wait.h>
  14.  
  15. int main(void)
  16. {
  17.     pid_t pid;
  18.     int shmid;
  19.     int *shared_memory;
  20.  
  21.     if((shmid = shmget(IPC_PRIVATE, SHMLBA, 0775 | IPC_CREAT | IPC_EXCL)) == -1){
  22.         perror("shmget");
  23.         return EXIT_FAILURE;
  24.     }
  25.  
  26.     if((shared_memory = shmat(shmid, NULL, 0)) == (int *)-1){
  27.         perror("shmat");
  28.         return EXIT_FAILURE;
  29.     }
  30.  
  31.     for(int i = 1; i <= 3; i++){
  32.         pid = fork();
  33.         if(pid == -1){
  34.             perror("fork");
  35.             return EXIT_FAILURE;
  36.         }
  37.         else if(pid == 0){
  38.             printf("Proces %d: dodano liczbe \"%d\" do pamieci dzielonej\n", i, i);
  39.             shared_memory[i] = i;
  40.             return EXIT_SUCCESS;   
  41.         }
  42.         else
  43.             sleep(1);
  44.     }
  45.  
  46.     wait(0);
  47.     printf("Liczby w pamieci dzielonej: ");
  48.     for(int j = 0; j < 3; j++)
  49.         printf("%d ", shared_memory[j]);
  50.     printf("\n");  
  51.  
  52.     if(shmdt(shared_memory) == -1){
  53.         perror("shmdt");
  54.         return EXIT_FAILURE;
  55.     }
  56.  
  57.     if(shmctl(shmid, 0, IPC_RMID) == -1){
  58.         perror("shmctl");
  59.         return EXIT_FAILURE;
  60.     }
  61.  
  62.     return EXIT_SUCCESS;
  63. }
Add Comment
Please, Sign In to add comment