190 lines
3.7 KiB
C
190 lines
3.7 KiB
C
#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);
|
|
}
|
|
*/
|
|
|