Advertisement
Guest User

zad2

a guest
Nov 14th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/sem.h>
  5. #include <sys/shm.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <wait.h>
  9. #include <sys/ipc.h>
  10.  
  11. void writer(int shmid)
  12. {
  13. char *str = shmat(shmid, NULL, 0);
  14. if(str == (void*)-1)
  15. perror("writer shmat");
  16.  
  17. strncpy(str, "Systemy Operacyjne 1", 50);
  18.  
  19. if(shmdt(str) < 0)
  20. perror("writer strdt");
  21. exit(0);
  22. }
  23.  
  24. void reader(int shmid)
  25. {
  26. char *str = shmat(shmid, NULL, 0);
  27. if(str == (void*)-1)
  28. perror("reader shmat");
  29.  
  30. printf("Odczytana wiadomosc: %s\n", str);
  31.  
  32. if(shmdt(str) < 0)
  33. perror("reader strdt");
  34. if(wait(NULL) < 0)
  35. perror("wait");
  36. }
  37.  
  38. int main(void)
  39. {
  40. int shmid = shmget(IPC_PRIVATE, 4096, 0600 | IPC_CREAT | IPC_EXCL);
  41. if(shmid < 0)
  42. perror("shmget");
  43.  
  44. int pid = fork();
  45.  
  46. if(pid < 0)
  47. perror("fork");
  48. if(pid == 0){
  49. sleep(1);
  50. puts("Proces 2");
  51. writer(shmid);
  52. }
  53. else{
  54. int pid1 = fork();
  55. if(pid1 < 0)
  56. perror("fork1");
  57. if(pid1 == 0){
  58. puts("Proces 1");
  59. writer(shmid);
  60. }
  61. else{
  62. sleep(2);
  63. puts("Proces 3");
  64. reader(shmid);
  65. }}
  66. if(shmctl(shmid, IPC_RMID, NULL) < 0)
  67. perror("shmctl");
  68.  
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement