Advertisement
Guest User

kons

a guest
Jan 22nd, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/ipc.h>
  4. #include <sys/msg.h>
  5. #include <sys/shm.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>
  8. #include <sys/sem.h>
  9. #include "operacje.c"
  10. #include "operacje.h"
  11.  
  12. struct bufor{
  13. long mtype;
  14. int mvalue;
  15. };
  16.  
  17. int *pam;
  18. #define MAX2 12
  19. #define MAX 10
  20. #define PELNY 2
  21. #define PUSTY 1
  22. #define zapis pam[MAX+1]
  23. #define odczyt pam[MAX]
  24. #define N 2
  25.  
  26. int main()
  27. {
  28. key_t klucz, kluczm, kluczs;
  29. int msgID, shmID, semID;
  30. int i;
  31. struct bufor komunikat;
  32.  
  33. // printf("konsument--------------------------------\n");
  34.  
  35.  
  36. //uzyskanie dosepu do kolejki komunikatow
  37. if((klucz = ftok(".", 'A'))==-1){
  38. printf("Blad ftok(a)\n");
  39. exit(-2);
  40. }
  41. msgID=msgget(klucz, IPC_CREAT|0666);
  42. if(msgID==-1){
  43. printf("blad kk (konsument)\n");
  44. exit(1);
  45. }
  46. //*****************************************************************
  47. //uzyskanie dosepu do pamieci dzielonej
  48. if((kluczm = ftok(".", 'B'))==-1){
  49. printf("Blad ftok(b)\n");
  50. exit(-2);
  51. }
  52. shmID=shmget(kluczm, MAX2*sizeof(int), IPC_CREAT | 0666);
  53. if(shmID==-1){
  54. printf("blad ftok(b)\n");
  55. exit(1);
  56. }
  57. //******************************************************************
  58. //przylaczenie pam. dzielonej
  59. pam=(int*)shmat(shmID, NULL, 0); if(pam==NULL){
  60. printf("blad przylaczania pamieci dzielonej\n");
  61. exit(1);
  62. }
  63. //dostęp do semafora
  64. if((kluczs=ftok(".", 'C'))==-1){
  65. printf("Blad ftok(c)\n");
  66. exit(-2);
  67. }
  68. semID=semget(kluczs, N, IPC_CREAT|0666);
  69.  
  70. //******************************************************************
  71. //odbieranie/wysylanie odpowiednich komunikatow +
  72. if(msgrcv(msgID, &komunikat, sizeof(komunikat.mvalue), PELNY, 0)==-1){
  73. printf("blad odbioru PELNEGO\n");
  74. exit(1);
  75. }else{
  76. printf("odebralem PELNY\n");
  77. }
  78. //odczyt
  79. waitSemafor(semID, PUSTY, IPC_CREAT | 0666);
  80. printf("Konsument pid - %i, index - %d, odczytano - %d\n", getpid(), odczyt, pam[odczyt]);
  81. odczyt=(odczyt+1)%MAX;
  82. komunikat.mtype=PUSTY;
  83.  
  84. if(msgsnd(msgID, &komunikat, sizeof(komunikat.mvalue), 0)==-1){
  85. printf("blad wysylania PUSTEGO\n");
  86. exit(1);
  87. }else{
  88. printf("wyslalem PUSTY\n");
  89. }
  90.  
  91. //******************************************************************
  92. // odczyt z bufora elementu o indeksie odczyt (pam. dzielona)
  93. //printf("Konsument pid - %i, index - %d, odczytane - %d\n", getpid(), odczyt, pam[odczyt]);
  94. //modyfikacja indeksu do odczytu
  95. //odczyt=(odczyt+1)%MAX;
  96. signalSemafor(semID, PUSTY);
  97.  
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement