diff --git a/src/nzg_msgList.c b/src/nzg_msgList.c index 9f41e3a..d1fdb60 100644 --- a/src/nzg_msgList.c +++ b/src/nzg_msgList.c @@ -1,21 +1,5 @@ #include "libnazgul.h" -// fonction pour la creation d'une liste de msgSpace -// cree un shm qui connait l'element de debut de liste -// et l'element de fin de liste. -// il ne se crée que s'il n'en existe pas deja un. -// -// crée également un sémaphore de gestion de liste -// a verouiller avant toute modification -int msgSpaceListInit(); - -// verouille le semaphore de la liste -int msgSpaceListLock(); - - -// deverouille le semaphore de la liste -int msgSpaceListUnlock(); - // cree un nouvel elemen int msgSpaceListElemCreate(msgSpaceListElemId resultName,msgSpaceId spaceId); @@ -32,72 +16,10 @@ int msgSpaceListRem(msgSpaceListElemId spaceId); char *spaceList; sem_t * sem; -int msgSpaceListInit(){ - int descMemory; - msgSpaceListElemId idList; -/*Fait un segment de memoir partager sur espace de listelement*/ - if( (descMemory=shm_open(idList,O_RDWR|O_CREAT|O_EXCL|O_TRUNC,0600))==-1){ - printf("Erreur de shmopen"); - } - - - - /*Creation de semaphore*/ - sem=sem_open(spaceList,O_CREAT|O_EXCL,0666,1024); - if(sem==SEM_FAILED){ - printf("erreur de semaphore"); - return -1; - } - /*Verouille le semaphore*/ - if(sem_wait(sem)==-1){ - printf("erreur pour l'ajout d'un semaphore"); - return -1; - } - - return 0; -}; - - - -int msgSpaceListLock(){ - - /*Ouverture d'un verrou d'un semafore*/ - sem=sem_open(spaceList,O_CREAT|O_EXCL,0666,1024); - if(sem==SEM_FAILED){ - printf("erreur de semaphore"); - return -1; - } - - /*Pose d'un semafore et bloque*/ - if(sem_wait(sem)==-1){ - printf("erreur pour l'ajout d'un semaphore"); - return -1; - } - return 0; - -} - -int msgSpaceListUnlock(){ - /* Ferme le semaphore*/ - if(sem_close(sem)==-1){ - printf("erreur sem_close"); - return -1; - } - /*semaphore non bloquant*/ - if (sem_trywait(sem)==-1){ - printf("erreur sem_trywait"); - return -1; - } - return 0; -}; - // cree un nouvel elemen int msgSpaceListElemCreate(msgSpaceListElemId resultName,msgSpaceId spaceId){ - - return 0; - }; diff --git a/src/nzg_spaceListInit.c b/src/nzg_spaceListInit.c new file mode 100644 index 0000000..f292400 --- /dev/null +++ b/src/nzg_spaceListInit.c @@ -0,0 +1,36 @@ +#include "libnazgul.h" + +// fonction pour la creation d'une liste de msgSpace +// cree un shm qui connait l'element de debut de liste +// et l'element de fin de liste. +// il ne se crée que s'il n'en existe pas deja un. +// +// crée également un sémaphore de gestion de liste +// a verouiller avant toute modification +int msgSpaceListInit(); + +int msgSpaceListInit(){ + int descMemory; + msgSpaceListElemId idList; +/*Fait un segment de memoir partager sur espace de listelement*/ + if( (descMemory=shm_open(idList,O_RDWR|O_CREAT|O_EXCL|O_TRUNC,0600))==-1){ + printf("Erreur de shmopen"); + } + + + + /*Creation de semaphore*/ + sem=sem_open(spaceList,O_CREAT|O_EXCL,0666,1024); + if(sem==SEM_FAILED){ + printf("erreur de semaphore"); + return -1; + } + /*Verouille le semaphore*/ + if(sem_wait(sem)==-1){ + printf("erreur pour l'ajout d'un semaphore"); + return -1; + } + + return 0; +}; + diff --git a/src/nzg_spaceListLocking.c b/src/nzg_spaceListLocking.c new file mode 100644 index 0000000..0a85f00 --- /dev/null +++ b/src/nzg_spaceListLocking.c @@ -0,0 +1,39 @@ +#include "libnazgul.h" + + +// verouille le semaphore de la liste + +int msgSpaceListLock(){ + + /*Ouverture d'un verrou d'un semafore*/ + sem=sem_open(spaceList,O_CREAT|O_EXCL,0666,1024); + if(sem==SEM_FAILED){ + printf("erreur de semaphore"); + return -1; + } + + /*Pose d'un semafore et bloque*/ + if(sem_wait(sem)==-1){ + printf("erreur pour l'ajout d'un semaphore"); + return -1; + } + return 0; + +} + + +// deverouille le semaphore de la liste +int msgSpaceListUnlock(){ + /* Ferme le semaphore*/ + if(sem_close(sem)==-1){ + printf("erreur sem_close"); + return -1; + } + /*semaphore non bloquant*/ + if (sem_trywait(sem)==-1){ + printf("erreur sem_trywait"); + return -1; + } + return 0; +}; +