Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/sem.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <string.h>
- #include <wait.h>
- static key_t key_gen(char* path, int id)
- {
- key_t key;
- key = ftok(path, id);
- if(key == -1)
- {
- perror("KEY ERROR");
- exit(-1);
- }
- else
- {
- return key;
- }
- }
- static void sem_create(int *sem_id, key_t key)
- {
- *sem_id = semget(key, 5, IPC_CREAT|0200);
- if(*sem_id == -1)
- {
- perror("SEM CREATE ERROR");
- exit(-1);
- }
- else
- {
- printf("Semafor zostal utworzony: %d\n", *sem_id);
- }
- }
- static void sem_set(int sem_id,int sem_no, int value)
- {
- if(semctl(sem_id, sem_no, SETVAL, value))
- {
- perror("SEM SET ERROR");
- exit(-1);
- }
- else
- {
- //printf("Semafor zostal ustawiony\n");
- }
- }
- static void sem_p(int sem_id,int sem_no)
- {
- struct sembuf buf;
- buf.sem_num = sem_no;
- buf.sem_op = -1;
- buf.sem_flg = SEM_UNDO;
- if(semop(sem_id, &buf, 1)==-1)
- {
- perror("SEM P ERROR");
- exit(-1);
- }
- else
- {
- //printf("Semafor zostal zamkniety %d\n", sem_no);
- }
- }
- static void sem_v(int sem_id, int sem_no)
- {
- struct sembuf buf;
- buf.sem_num = sem_no;
- buf.sem_op = 1;
- buf.sem_flg = SEM_UNDO;
- if(semop(sem_id, &buf, 1)==-1)
- {
- perror("SEM V ERROR");
- exit(-1);
- }
- else
- {
- //printf("Semafor zostal otwarty %d\n", sem_no);
- }
- }
- static void sem_delete(int sem_id)
- {
- if(semctl(sem_id, 0, IPC_RMID)==-1) //2 arg, numer semafora w zbiorze
- {
- perror("SEM DEL ERROR");
- exit(-1);
- }
- else
- {
- printf("Semafor zostal usuniety: %d\n",sem_id);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement