Etudes/C/Deuxieme annee/semaphoreP2/semtools.c

57 lines
1.1 KiB
C

/******************************************************
Fichier : semtools.c
Boite a outils pour manipuler des semaphores
******************************************************/
#include "semtools.h"
int fixe_valeursem(){
union semun sem_union;
sem_union.val = 1;
int retour = 1;
printf("id_sem dans fixe_valeur = %d\n",id_sem);
if (semctl(id_sem,0,SETVAL,/*sem_union*/1) == -1){
printf("impossible de creer le semaphore\n%s\n",strerror(errno));
retour = 0;
}
return(retour);
}
void supp_valeursem(){
union semun sem_union;
if (semctl(id_sem,0,IPC_RMID,sem_union) == -1){
printf("impossible de supprimer le semaphore\n%s\n",strerror(errno));
}
}
int P(){
struct sembuf sem_b;
int retour = 1;
sem_b.sem_num = 0;
sem_b.sem_op = -1; //P()
sem_b.sem_flg = SEM_UNDO ;
if (semop(id_sem,&sem_b,1) == -1){
printf("echec semaphore P()\n%s\n",strerror(errno));
retour = 0 ;
}
return(retour);
}
int V(){
struct sembuf sem_b;
int retour=1;
sem_b.sem_num = 0;
sem_b.sem_op = 1; //V()
sem_b.sem_flg = SEM_UNDO ;
if (semop(id_sem,&sem_b,1) == -1){
printf("echec semaphore V()\n%s\n",strerror(errno));
retour = 0 ;
}
return(retour);
}