#include #include #include #include #include #include #include int _SEMID; void resetServerSem(int semid); void setupServerSem() { key_t semKey = ftok(KEYFILE, SEMKEY); _SEMID = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR); if (_SEMID == -1) { errExit("getsem", "F4Server"); } resetServerSem(_SEMID); } void setupClientSem() { key_t semKey = ftok(KEYFILE, SEMKEY); _SEMID = semget(semKey, 3, IPC_CREAT | S_IRUSR | S_IWUSR); if (_SEMID == -1) { errExit("getsem", "F4Client"); } } void semOp(int semid, short sem_num, short sem_op) { struct sembuf sop = {.sem_num = sem_num, .sem_op = sem_op, .sem_flg = 0}; int res; do { res = semop(semid, &sop, 1); } while ((errno == EINTR)); if (res == -1) { errExitMsg("semOp"); } } int getSemid(key_t key, int size){ int semid = semget(key, size, S_IRUSR | S_IWUSR | IPC_CREAT); if (semid == -1) { errExit("semget", "getSemid"); } return semid; } // mette i semafori a 0 e 2 void resetServerSem(int semid){ unsigned short val[3] = {0, 0, 0}; // player1, player2, server union semun arg; arg.array = val; if (semctl(semid, 0 , SETALL, arg) == -1) { errExit("semctl", "getSemid"); } }