Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ==========MAIN===============
- int main()
- {
- int semID,shmID;
- key_t klucz;
- if( (klucz = ftok(".",'A')) == -1 )
- {
- printf("Blad ftok (main)\n");
- exit(1);
- }
- semID = alokujSem(klucz, IPC_CREAT | IPC_EXCL | 0666);
- inicjalizujSem(semID, N);
- printf("Semafor gotowy!\n");
- shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | IPC_EXCL | 0666);
- if(shmID==-1)
- {
- printf("Blad shm\n");
- exit(1);
- }
- printf("Pamiec gotowa!\n");
- for(int i = 0; i < Proc; i++)
- {
- switch (fork())
- {
- case -1:
- perror("Blad fork (pisz)");
- exit(2);
- case 0:
- execl("./pisz","pisz", "-1", (char*)0 );
- exit(0);
- break;
- default:
- break;
- }
- switch(fork())
- {
- case -1:
- printf("Blad fork (czyt)");
- exit(2);
- case 0:
- execl("./czyt","czyt", "-1", (char*)0 );
- exit(0);
- break;
- default:
- break;
- }
- }
- for(int i=0;i<2*Proc;i++) wait(1);
- zwolnijSem(semID);
- shmctl(shmID,IPC_RMID,NULL);
- }
- =========PISANIE==========
- int main()
- {
- srand( time( NULL ) );
- key_t klucz;
- int semID,shmID;
- int *bufor;
- if((klucz = ftok(".",'A')) == -1 )
- {
- printf("Blad ftok (A) \n");
- exit(2);
- }
- semID = alokujSem(klucz, IPC_CREAT |0666);
- if(semID == -1)
- {
- printf("Blad semafora - piszacy\n");
- exit(1);
- }
- shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | 0666 );
- if(shmID == -1)
- {
- printf("Blad pamieci dzielonej\n");
- exit(1);
- }
- bufor=(int*)shmat(shmID,NULL, 0);
- for(;Sprawdz(semID)!=N;){}
- PN(semID,N);
- for(int i=0; i<MAX;i++)
- bufor[(rand()%MAX)] = (rand()%MAX);
- printf("Piszacy o PID:%d\n",getpid());
- //printf("%d\n",Sprawdz(semID));
- VN(semID,N);
- //printf("%d\n",Sprawdz(semID));
- printf("Piszacy %d skonczyl\n",getpid());
- }
- ========CZYTANIE===========
- int main()
- {
- key_t klucz;
- int semID,shmID;
- int *bufor;
- if((klucz = ftok(".",'A')) == -1 )
- {
- printf("Blad ftok (A) \n");
- exit(2);
- }
- semID = alokujSem(klucz, IPC_CREAT |0666);
- if(semID == -1)
- {
- printf("Blad semafora - czytajacy\n");
- exit(1);
- }
- shmID=shmget(klucz,MAX*sizeof(int), IPC_CREAT | 0666 );
- if(shmID == -1)
- {
- printf("Blad pamieci dzielonej\n");
- exit(1);
- }
- bufor=(int*)shmat(shmID,NULL, SHM_RDONLY);
- for(;Sprawdz(semID)<1;){}
- PN(semID,1);
- for(int i=0;i<MAX;i++)
- fprintf(stdout,"Czytam %d \tPID:%d \n",bufor[i],getpid());
- //printf("%d\n",Sprawdz(semID));
- VN(semID,1);
- //printf("%d\n",Sprawdz(semID));
- printf("Czytajacy %d skonczyl\n",getpid());
- }
- ========OPERACJE========
- int alokujSem(key_t klucz, int flagi)
- {
- int semID;
- if( (semID = semget(klucz,1,flagi)) == -1)
- {
- perror("Blad semget (alokujSemafor): ");
- exit(1);
- }
- return semID;
- }
- int zwolnijSem(int semID)
- {
- return semctl(semID, 0, IPC_RMID , NULL);
- }
- void inicjalizujSem(int semID, int val)
- {
- if (semctl(semID,0,SETVAL,val) == -1 )
- {
- perror("Blad semctl (inicjalizujSemafor): ");
- exit(1);
- }
- }
- int PN(int semID, int n)
- {
- struct sembuf operacje;
- operacje.sem_num = 0;
- operacje.sem_op = -n;
- operacje.sem_flg = 0;
- if(semop(semID, &operacje , 1) == -1)
- {
- perror("Blad semop(PN)");
- return -1;
- }
- return 1;
- }
- int VN(int semID, int n)
- {
- struct sembuf operacje;
- operacje.sem_num = 0;
- operacje.sem_op = n;
- operacje.sem_flg = 0;
- if(semop(semID, &operacje , 1) == -1)
- {
- perror("Blad semop(VN)");
- return -1;
- }
- return 1;
- }
- int Sprawdz(int semID)
- {
- return semctl(semID,0,GETVAL,NULL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement