Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- serwer
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #include <sys/sem.h>
- #include <signal.h>
- #define PERMS 0666
- static struct sembuf op_lock1[1] = {
- 0, -1, 0
- };
- static struct sembuf op_unlock1[1] = {
- 0, 1, 0
- };
- static struct sembuf op_lock2[1] = {
- 1, -1, 0
- };
- static struct sembuf op_unlock2[1] = {
- 1, 1, 0
- };
- void blok_sem1(int semid)
- {
- if (semop(semid, &op_lock1[0], 1)<0)
- perror("blad lokowania sem1");
- }
- void odblok_sem1(int semid)
- {
- if (semop(semid, &op_unlock1[0], 1) < 0)
- perror("blad odlokowania sem1");
- }
- void blok_sem2(int semid)
- {
- if (semop(semid, &op_lock2[0], 1)<0)
- perror("blad lokowania sem2");
- }
- void odblok_sem2(int semid)
- {
- if (semop(semid, &op_unlock2[0], 1) < 0)
- perror("blad odlokowania sem2");
- }
- char *shmp;
- int semid;
- int shmid;
- int run=1;
- void oblsluga_zakonczenia_serwera(int nr_sig)
- {
- printf("Koniec serwera\n");
- run=0;
- if(shmdt(shmp)<0){
- perror("Blad odlaczania pamieci dzielonej");}
- if(semctl(semid,0,IPC_RMID,0)<0){
- perror("Blad usuwania zbioru semaforow");}
- if(shmctl(shmid,IPC_RMID,NULL)<0){
- perror("Blad usuwania pamieci dzielonej");}
- exit(1);
- }
- int main(){
- signal(SIGINT,oblsluga_zakonczenia_serwera);
- srand(getpid());
- shmid= shmget(ftok("serwer.c",3), sizeof(int),IPC_CREAT | IPC_EXCL | PERMS);
- if (shmid==-1){
- perror("Blad tworzenia pamieci dzielonej");
- }
- shmp = shmat(shmid,0, 0);
- if (shmp==NULL){
- perror("Blad dolaczania pamieci dzielonej");
- }
- semid = semget(ftok("serwer.c",3), 2, IPC_CREAT | PERMS);
- if (semid < 0){
- perror("blad tworzenia zbioru semaforow");
- }
- int liczba=1;
- while(run){
- blok_sem2(semid);
- int time=rand()%10000001;
- printf("oczekuje %d\n",liczba);
- *shmp=liczba;
- liczba++;
- odblok_sem1(semid);
- usleep(time);
- }
- return 0;
- }
- wynik
- 85258@st10-lab312:~/Desktop/lab7$ ./klient
- nr 1
- nr 2
- nr 3
- nr 4
- nr 5
- nr 6
- nr 7
- nr 8
- nr 9
- nr 10
- 85258@st10-lab312:~/Desktop/lab7$ ./klient&
- [1] 3796
- 85258@st10-lab312:~/Desktop/lab7$ nr 11
- nr 12
- nr 13
- nr 14
- nr 15
- nr 16
- nr 17
- nr 18
- nr 19
- nr 20
- ./klient&
- [2] 3797
- [1] Done ./klient
- 85258@st10-lab312:~/Desktop/lab7$ nr 21
- nr 22
- nr 23
- nr 24
- nr 25
- nr 26
- nr 27
- nr 28
- nr 29
- nr 30
- ^C
- [2]+ Done ./klient
- klient
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #include <sys/sem.h>
- #include <signal.h>
- #define PERMS 0666
- static struct sembuf op_lock1[1] = {
- 0, -1, 0
- };
- static struct sembuf op_unlock1[1] = {
- 0, 1, 0
- };
- static struct sembuf op_lock2[1] = {
- 1, -1, 0
- };
- static struct sembuf op_unlock2[1] = {
- 1, 1, 0
- };
- void blok_sem1(int semid)
- {
- if (semop(semid, &op_lock1[0], 1)<0)
- perror("blad lokowania sem1");
- }
- void odblok_sem1(int semid)
- {
- if (semop(semid, &op_unlock1[0], 1) < 0)
- perror("blad odlokowania sem1");
- }
- void blok_sem2(int semid)
- {
- if (semop(semid, &op_lock2[0], 1)<0)
- perror("blad lokowania sem2");
- }
- void odblok_sem2(int semid)
- {
- if (semop(semid, &op_unlock2[0], 1) < 0)
- perror("blad odlokowania sem2");
- }
- char *shmp;
- int semid;
- int shmid;
- int main(){
- srand(getpid());
- int shmid= shmget(ftok("serwer.c",3), sizeof(int),PERMS);
- if (shmid==-1){
- perror("Blad tworzenia pamieci dzielonej");
- exit(0);}
- char *shmp = shmat(shmid,0, 0);
- if (shmp==NULL){
- perror("Blad dolaczania pamieci dzielonej");
- exit(0);}
- semid = semget(ftok("serwer.c",3), 2, PERMS);
- if (semid < 0){
- perror("blad tworzenia zbioru semaforow");}
- int liczba,i;
- for(i=0;i<10;i++){
- odblok_sem2(semid);
- blok_sem1(semid);
- liczba=*shmp;
- printf("nr %d\n",liczba);
- int time=rand()%10000001;
- usleep(time);
- }
- shmdt(shmp);
- return 0;
- }
- wynik
- 85258@st10-lab312:~/Desktop/lab7$ ./klient
- nr 1
- nr 2
- nr 3
- nr 4
- nr 5
- nr 6
- nr 7
- nr 8
- nr 9
- nr 10
- 85258@st10-lab312:~/Desktop/lab7$ ./klient&
- [1] 3796
- 85258@st10-lab312:~/Desktop/lab7$ nr 11
- nr 12
- nr 13
- nr 14
- nr 15
- nr 16
- nr 17
- nr 18
- nr 19
- nr 20
- ./klient&
- [2] 3797
- [1] Done ./klient
- 85258@st10-lab312:~/Desktop/lab7$ nr 21
- nr 22
- nr 23
- nr 24
- nr 25
- nr 26
- nr 27
- nr 28
- nr 29
- nr 30
- ^C
- [2]+ Done ./klient
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement