Advertisement
Guest User

serwer

a guest
Nov 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/ipc.h>
  6. #include <sys/shm.h>
  7. #include <sys/sem.h>
  8. #include <signal.h>
  9.  
  10. int semid;
  11. int shmid;
  12. char *shmp;
  13.  
  14. static struct sembuf op_lock1[1] = {0,-1,0};
  15. static struct sembuf op_unlock1[1] = {0,1,0};
  16.  
  17. static struct sembuf op_lock2[2] = {1,-1,0};
  18. static struct sembuf op_unlock2[1] = {1,1,0};
  19.  
  20. void blokuj_sem1(int semid){
  21. if(semop(semid, &op_lock1[0],1)<0)
  22. perror("blad lokowania semafora");
  23. }
  24.  
  25. void odblokuj_sem1(int semid){
  26. if(semop(semid,&op_unlock1[0],1)<0)
  27. perror("blad odblokowania semafora");
  28. }
  29.  
  30. void blokuj_sem2(int semid){
  31. if(semop(semid, &op_lock2[0],1)<0)
  32. perror("blad lokowania semafora");
  33. }
  34.  
  35. void odblokuj_sem2(int semid){
  36. if(semop(semid,&op_unlock2[0],1)<0)
  37. perror("blad odblokowania semafora");
  38. }
  39.  
  40.  
  41. void obsluga_zakonczenia_serwera(int nr_sig){
  42. printf("zakonczenie serwera\n");
  43.  
  44. if(shmdt(shmp)<0)
  45. perror("blad odliczania pamieci dzielonej");
  46. if(semctl(semid,0,IPC_RMID,0)<0)
  47. perror("blad usuwania zbiorow semaforow");
  48. if(shmctl(shmid,IPC_RMID,NULL)<0)
  49. perror("blad usuwania pamieci dzielonej");
  50. exit(1);
  51. }
  52.  
  53.  
  54.  
  55.  
  56. int main(){
  57. signal(SIGINT, obsluga_zakonczenia_serwera);
  58. srand(getpid());
  59.  
  60. shmid = shmget(ftok("serwer.c",3), sizeof(int),IPC_CREAT | IPC_EXCL | 0666);
  61. if(shmid == -1)
  62. perror("blad tworzenia pamieci dzielonej");
  63.  
  64. shmp = shmat(shmid,0,0);
  65. if(shmp == NULL)
  66. perror("blad dolaczenia pamieci dzielonej");
  67.  
  68. semid=semget(ftok("serwer.c",3),2,IPC_CREAT | 0666);
  69. if(semid< 0)
  70. perror("blad tworzenia zbioru semaforow");
  71.  
  72. int liczba = 1;
  73. while(1){//petla oczekujaca 1 sek
  74. blokuj_sem2(semid);
  75.  
  76. int time = rand()%1000001;
  77. printf("Spie przez %d\n",time);
  78. *shmp = liczba;
  79. liczba++;
  80.  
  81. odblokuj_sem1(semid);
  82. usleep(time);
  83. }
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement