Advertisement
Shiyan12

server.c

Dec 6th, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.44 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/ipc.h>
  3. #include <sys/sem.h>
  4. #include <sys/stat.h>
  5. // идентификатор набора семафоров
  6. #define KEY 100
  7. // сколько семафоров имеется в наборе
  8. #define NUM_SEM 5
  9.  
  10. int main() {
  11.     // прерывает свою работу, если нет набора семафоров
  12.     int fd = semget(KEY, NUM_SEM, 0);
  13.     // если нет набора семафоров
  14.     if (fd == -1) {
  15.         printf("Ошибка в semget\n");
  16.         return 0;
  17.     }
  18.     // получить значение 3-его семафора из набора
  19.     int rtrn = semctl(fd, 2, GETVAL, 0);
  20.     if (rtrn == -1) {
  21.         printf("Ошибка в 1-ом semctl\n");
  22.         return 0;
  23.     }
  24.     printf("Значение 3-его семафора из набора = %d\n", rtrn);
  25.     struct sembuf buf[1] = {{2, -5, SEM_UNDO | IPC_NOWAIT}};
  26.     // {2, -5, 1} - уменьшить значение 3-го семафора на -5
  27.     if (semop(fd, buf, 1) == -1) {
  28.         printf("Ошибка в semop\n");
  29.         return 0;
  30.     }
  31.     /* Получить идентификатор процесса, который выполнял операции над
  32.     1-ым семафором последним. */
  33.     rtrn = semctl(fd, 0, GETPID, 0);
  34.     if (rtrn == -1) {
  35.         printf("Ошибка во 2-ом semctl\n");
  36.         return 0;
  37.     }
  38.     printf("Последнюю операцию над 1-ым семафором выполнил: %d\n", rtrn);
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement