Elaborato_SO/src/custom_sem.c

34 lines
782 B
C
Raw Normal View History

2023-05-14 21:46:06 +02:00
#include <sys/sem.h>
2023-05-15 09:22:52 +02:00
#include <sys/stat.h>
2023-05-15 10:43:25 +02:00
2023-05-14 21:46:06 +02:00
#include <custom_sem.h>
2023-05-15 09:22:52 +02:00
#include <structures.h>
2023-05-14 21:46:06 +02:00
#include <errExit.h>
void semOp(int semid, short sem_num, short sem_op) {
struct sembuf sop = {.sem_num = sem_num, .sem_op = sem_op, .sem_flg = 0};
if (semop(semid, &sop, 1) == -1) {
errExit("semop", "semOp");
}
2023-05-14 22:24:57 +02:00
}
2023-05-15 10:31:50 +02:00
int getSemid(key_t key, int size){
2023-05-15 10:43:25 +02:00
int semid = semget(key, size, S_IRUSR | S_IWUSR | IPC_CREAT);
2023-05-14 22:24:57 +02:00
if (semid == -1) {
errExit("semget", "getSemid");
}
2023-05-15 10:43:25 +02:00
return semid;
}
// mette i semafori a 0
void resetServerSem(int semid){
2023-05-15 10:52:18 +02:00
unsigned short val[2] = {0, 2};
2023-05-14 22:24:57 +02:00
union semun arg;
arg.array = val;
if (semctl(semid, 0 , SETALL, arg) == -1) {
errExit("semctl", "getSemid");
}
2023-05-14 21:46:06 +02:00
}