Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/sem.h>
  5. #include <sys/types.h>
  6. #include <sys/ipc.h>
  7. #include <string.h>
  8. #include <wait.h>
  9.  
  10. static key_t key_gen(char* path, int id)
  11. {
  12.     key_t key;
  13.     key = ftok(path, id);
  14.     if(key == -1)
  15.     {
  16.         perror("KEY ERROR");
  17.         exit(-1);
  18.     }
  19.     else
  20.     {
  21.         return key;
  22.     }
  23. }
  24. static void sem_create(int *sem_id, key_t key)
  25. {
  26.     *sem_id = semget(key, 5, IPC_CREAT|0200);
  27.     if(*sem_id == -1)
  28.     {
  29.         perror("SEM CREATE ERROR");
  30.         exit(-1);
  31.     }
  32.     else
  33.     {
  34.         printf("Semafor zostal utworzony: %d\n", *sem_id);
  35.     }
  36. }
  37. static void sem_set(int sem_id,int sem_no, int value)
  38. {
  39.     if(semctl(sem_id, sem_no, SETVAL, value))
  40.     {
  41.         perror("SEM SET ERROR");
  42.         exit(-1);
  43.     }
  44.     else
  45.     {
  46.         //printf("Semafor zostal ustawiony\n");
  47.     }
  48. }
  49. static void sem_p(int sem_id,int sem_no)
  50. {
  51.     struct sembuf buf;
  52.     buf.sem_num = sem_no;
  53.     buf.sem_op = -1;
  54.     buf.sem_flg = SEM_UNDO;
  55.     if(semop(sem_id, &buf, 1)==-1)
  56.     {
  57.         perror("SEM P ERROR");
  58.         exit(-1);
  59.     }
  60.     else
  61.     {
  62.         //printf("Semafor zostal zamkniety %d\n", sem_no);
  63.     }  
  64. }
  65. static void sem_v(int sem_id, int sem_no)
  66. {
  67.     struct sembuf buf;
  68.     buf.sem_num = sem_no;
  69.     buf.sem_op = 1;
  70.     buf.sem_flg = SEM_UNDO;
  71.     if(semop(sem_id, &buf, 1)==-1)
  72.     {
  73.         perror("SEM V ERROR");
  74.         exit(-1);
  75.     }
  76.     else
  77.     {
  78.         //printf("Semafor zostal otwarty %d\n", sem_no);
  79.     }  
  80. }
  81. static void sem_delete(int sem_id)
  82. {
  83.     if(semctl(sem_id, 0, IPC_RMID)==-1) //2 arg, numer semafora w zbiorze
  84.     {
  85.         perror("SEM DEL ERROR");
  86.         exit(-1);
  87.     }
  88.     else
  89.     {
  90.         printf("Semafor zostal usuniety: %d\n",sem_id);
  91.     }
  92.    
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement