Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <sys/shm.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- int alokujSem(key_t klucz, int number,int flagi)
- {
- int semID;
- if((semID=semget(klucz,number, flagi))==-1)
- {
- perror("Blad semget(alokujSem) ");
- exit(-1);
- }
- return semID;
- }
- int zwolnijSem(int semID, int number)
- {
- return semctl(semID, number, IPC_RMID,NULL);
- }
- void inicjalizujSem(int semID,int number,int val)
- {
- if(semctl(semID, number, SETVAL, val)==-1)
- {
- perror("Blad semctl (inicjalizujSem) ");
- exit(-2);
- }
- }
- int main(int argc, char * argv[])
- {
- key_t kluczs,kluczm; //klucz do semafora i pamieci dzielonej
- int semID; //identyfikator zestawu semaforow
- int N=6; //liczba semaforo -widelec+jadalnia
- int i;
- int shmID; //identyfikatro pamieci dzielonej
- char bufor[3];
- int *widelec; //tablica widelcow -pamiec dzielona
- if((kluczs=ftok(".",123))==-1)
- {
- printf("Blad ftok (main)\n");
- exit(-3);
- }
- //tworzenie zestawu 6 semaforow -widelec + jadalnia
- semID = semget(kluczs,N,0600|IPC_CREAT|IPC_EXCL);
- for(i=0;i<5;i++)
- inicjalizujSem(semID, i,1); //inicjalizuj semafor widelcow
- inicjalizujSem(semID,5,4); //inicjalizuje semafor jadalni
- kluczm=ftok(".",456); //klucz do pamieci dzielonej
- //tworzenie pamieci dzielonej
- if((shmID=shmget(kluczm,5*sizeof(int),IPC_CREAT|0600|IPC_EXCL))==-1)
- {
- printf("Blad shm\n");
- exit(-4);
- }
- fflush(stdout);
- widelec=(int*)shmat(shmID,NULL,0); //przydzielenie pamieci dzielonej
- for(i=0;i<5;i++)
- switch(fork())
- {
- case -1:
- perror("Blad fork (glowny)");
- exit(2);
- case 0:
- sprintf(bufor,"%d",i); //przekazanie numeru
- execl("./filozof","filozof",bufor,NULL);
- }
- for(i=0;i<5;i++)
- wait(NULL);//czekanie na zakonczenie procesow filozofow
- zwolnijSem(semID,N); //zwolnienie zestawu semaforow
- shmctl(semID,IPC_RMID,NULL); //zwolnienie pamieci dzielonej
- printf("Koniec\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement