Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #include <sys/stat.h>
- // идентификатор набора семафоров
- #define KEY 100
- // сколько семафоров имеется в наборе
- #define NUM_SEM 5
- int main() {
- // прерывает свою работу, если нет набора семафоров
- int fd = semget(KEY, NUM_SEM, 0);
- // если нет набора семафоров
- if (fd == -1) {
- printf("Ошибка в semget\n");
- return 0;
- }
- // получить значение 3-его семафора из набора
- int rtrn = semctl(fd, 2, GETVAL, 0);
- if (rtrn == -1) {
- printf("Ошибка в 1-ом semctl\n");
- return 0;
- }
- printf("Значение 3-его семафора из набора = %d\n", rtrn);
- struct sembuf buf[1] = {{2, -5, SEM_UNDO | IPC_NOWAIT}};
- // {2, -5, 1} - уменьшить значение 3-го семафора на -5
- if (semop(fd, buf, 1) == -1) {
- printf("Ошибка в semop\n");
- return 0;
- }
- /* Получить идентификатор процесса, который выполнял операции над
- 1-ым семафором последним. */
- rtrn = semctl(fd, 0, GETPID, 0);
- if (rtrn == -1) {
- printf("Ошибка во 2-ом semctl\n");
- return 0;
- }
- printf("Последнюю операцию над 1-ым семафором выполнил: %d\n", rtrn);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement