Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. ==========MAIN===============
  2. int main()
  3. {
  4.     int semID,shmID;
  5.     key_t klucz;
  6.     if( (klucz = ftok(".",'A')) == -1 )
  7.     {
  8.         printf("Blad ftok (main)\n");
  9.         exit(1);
  10.     }
  11.     semID = alokujSem(klucz, IPC_CREAT | IPC_EXCL | 0666);
  12.     inicjalizujSem(semID, N);
  13.     printf("Semafor gotowy!\n");
  14.     shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | IPC_EXCL | 0666);
  15.     if(shmID==-1)
  16.     {
  17.         printf("Blad shm\n");
  18.         exit(1);
  19.     }
  20.     printf("Pamiec gotowa!\n");
  21.    
  22.     for(int i = 0; i < Proc; i++)
  23.     {
  24.         switch (fork())
  25.         {
  26.         case -1:
  27.             perror("Blad fork (pisz)");
  28.             exit(2);
  29.         case 0:
  30.             execl("./pisz","pisz", "-1", (char*)0 );
  31.             exit(0);
  32.             break;
  33.         default:
  34.             break; 
  35.         }
  36.         switch(fork())
  37.         {
  38.         case -1:
  39.             printf("Blad fork (czyt)");
  40.             exit(2);
  41.         case 0:
  42.             execl("./czyt","czyt", "-1", (char*)0 );
  43.             exit(0);           
  44.             break;
  45.         default:
  46.             break; 
  47.         }
  48.     }
  49.     for(int i=0;i<2*Proc;i++) wait(1);
  50.  
  51.     zwolnijSem(semID);
  52.     shmctl(shmID,IPC_RMID,NULL);
  53. }
  54.  
  55.  
  56. =========PISANIE==========
  57.  
  58. int main()
  59. {
  60.     srand( time( NULL ) );
  61.     key_t klucz;
  62.     int semID,shmID;
  63.     int *bufor;
  64.     if((klucz = ftok(".",'A')) == -1 )
  65.     {
  66.         printf("Blad ftok (A) \n");
  67.         exit(2);
  68.     }
  69.     semID = alokujSem(klucz, IPC_CREAT |0666);
  70.     if(semID == -1)
  71.     {
  72.         printf("Blad semafora - piszacy\n");
  73.         exit(1);
  74.     }
  75.     shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | 0666 );
  76.     if(shmID == -1)
  77.     {
  78.         printf("Blad pamieci dzielonej\n");
  79.         exit(1);
  80.     }
  81.     bufor=(int*)shmat(shmID,NULL, 0);
  82.     for(;Sprawdz(semID)!=N;){}
  83.     PN(semID,N);
  84.     for(int i=0; i<MAX;i++)
  85.     bufor[(rand()%MAX)] = (rand()%MAX);
  86.     printf("Piszacy o PID:%d\n",getpid());  
  87.     //printf("%d\n",Sprawdz(semID));
  88.     VN(semID,N);
  89.     //printf("%d\n",Sprawdz(semID));
  90.     printf("Piszacy %d skonczyl\n",getpid());
  91. }
  92.  
  93.  
  94. ========CZYTANIE===========
  95. int main()
  96. {
  97.     key_t klucz;
  98.     int semID,shmID;
  99.     int *bufor;
  100.     if((klucz = ftok(".",'A')) == -1 )
  101.     {
  102.         printf("Blad ftok (A) \n");
  103.         exit(2);
  104.     }
  105.     semID = alokujSem(klucz, IPC_CREAT |0666);
  106.     if(semID == -1)
  107.     {
  108.         printf("Blad semafora - czytajacy\n");
  109.         exit(1);
  110.     }
  111.     shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | 0666 );
  112.     if(shmID == -1)
  113.     {
  114.         printf("Blad pamieci dzielonej\n");
  115.         exit(1);
  116.     }
  117.     bufor=(int*)shmat(shmID,NULL, SHM_RDONLY);
  118.     for(;Sprawdz(semID)<1;){}
  119.     PN(semID,1);
  120.     for(int i=0;i<MAX;i++)
  121.     fprintf(stdout,"Czytam %d \tPID:%d \n",bufor[i],getpid());  
  122.     //printf("%d\n",Sprawdz(semID));
  123.     VN(semID,1);
  124.     //printf("%d\n",Sprawdz(semID));
  125.     printf("Czytajacy %d skonczyl\n",getpid());
  126. }
  127.  
  128.  
  129.  
  130. ========OPERACJE========
  131. int alokujSem(key_t klucz, int flagi)
  132. {
  133.     int semID;
  134.     if( (semID = semget(klucz,1,flagi)) == -1)
  135.     {
  136.         perror("Blad semget (alokujSemafor): ");
  137.         exit(1);
  138.     }
  139.     return semID;
  140. }
  141. int zwolnijSem(int semID)
  142. {
  143.     return semctl(semID, 0, IPC_RMID , NULL);
  144.  
  145. }
  146. void inicjalizujSem(int semID, int val)
  147. {
  148.     if (semctl(semID,0,SETVAL,val) == -1 )
  149.     {
  150.         perror("Blad semctl (inicjalizujSemafor): ");
  151.         exit(1);
  152.     }
  153.  
  154. }
  155.  
  156. int PN(int semID, int n)
  157. {
  158.     struct sembuf operacje;
  159.     operacje.sem_num = 0;
  160.     operacje.sem_op = -n;
  161.     operacje.sem_flg = 0;
  162.     if(semop(semID, &operacje , 1) == -1)
  163.     {
  164.         perror("Blad semop(PN)");
  165.         return -1;
  166.     }
  167.     return 1;
  168. }
  169. int VN(int semID, int n)
  170. {
  171.     struct sembuf operacje;
  172.     operacje.sem_num = 0;
  173.     operacje.sem_op = n;
  174.     operacje.sem_flg = 0;
  175.     if(semop(semID, &operacje , 1) == -1)
  176.     {
  177.         perror("Blad semop(VN)");
  178.         return -1;
  179.     }
  180.     return 1;
  181. }
  182. int Sprawdz(int semID)
  183. {
  184.     return semctl(semID,0,GETVAL,NULL);
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement