#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); // modifie l'element suivant de l'element choisi // et le fait pointer sur un nouvel ID int msgSpaceListElemLinkNext(msgSpaceListElemId current,msgSpaceListElemId next); // ajoute un element en début de liste. // fait pointer l'ancien dernier vers lui // il s'enregistre en tant que dernier chez la liste int msgSpaceListAdd(msgSpaceListElemId ); 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; }; /*void *add(char * idAncien, char *idNouveau); int descMemory; void * add(char * idAncien, char *idNouveau){ descMemory=shm_open("/titi", O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0600); if (descMemory== -1){ printf("erreur de sh_open\n"); return NULL; }; if (ftruncate(descMemory,1024)== -1 ){ printf("erreur ftruncate"); } memory= mmap(0, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, mSFd, 0)*/ /*typedef struct MsgSpaceListElem { void * id; int ownerPid; msgSpaceListElemId next; } * msgSpaceList, msgSpaceListElem; msgSpaceListElemId *mslist; if( Strcpy(idAncien, idNouveau) ==-1){ printf("erreur de strcpy"); }; strcpy(idAncien, idNouveau); return NULL; } */ /* ajout dans la liste */ /*AVEC POINTEUR */ /* msgSpaceListElem *addBegining( msgSpaceListElem*list,int ownerpid){ msgSpaceListElem *unSpacemsgListElem; if( (unSpacemsgListElem=(msgSpaceListElem *)malloc(sizeof(msgSpaceListElem) ) )==NULL){ perror("ereur dallocation de memoire"); exit(1);} unSpacemsgListElem->ownerPid = ownerpid; return(unSpacemsgListElem); } int test(int argc,char **argv){ msgSpaceListElem *ma_liste; msgSpaceListElem *listMove; ma_liste=NULL; ma_liste=addBegining(ma_liste, 3); ma_liste=addBegining(ma_liste, 6); ma_liste=addBegining(ma_liste, 5); for (listMove=ma_liste ;listMove!=NULL ; listMove=listMove->next) { printf("valaeur :%d\n",listMove->ownerPid); } return(0); } */