l3.libnazgul/src/nzg_msgList.c

190 lines
3.7 KiB
C
Raw Normal View History

#include "libnazgul.h"
2004-02-22 17:29:10 +00:00
// 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<63>e que s'il n'en existe pas deja un.
//
// cr<63>e <20>galement un s<>maphore de gestion de liste
// a verouiller avant toute modification
2004-02-22 17:40:26 +00:00
int msgSpaceListInit();
2004-02-22 15:37:47 +00:00
2004-02-22 17:29:10 +00:00
// verouille le semaphore de la liste
2004-02-22 17:40:26 +00:00
int msgSpaceListLock();
2004-02-22 15:37:47 +00:00
2004-02-22 17:29:10 +00:00
// deverouille le semaphore de la liste
2004-02-22 17:40:26 +00:00
int msgSpaceListUnlock();
2004-02-22 17:29:10 +00:00
// cree un nouvel elemen
2004-02-22 17:40:26 +00:00
int msgSpaceListElemCreate(msgSpaceListElemId resultName,msgSpaceId spaceId);
2004-02-22 17:29:10 +00:00
// modifie l'element suivant de l'element choisi
// et le fait pointer sur un nouvel ID
2004-02-22 17:40:26 +00:00
int msgSpaceListElemLinkNext(msgSpaceListElemId current,msgSpaceListElemId next);
2004-02-22 17:29:10 +00:00
// 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
2004-02-22 17:40:26 +00:00
int msgSpaceListAdd(msgSpaceListElemId );
int msgSpaceListRem(msgSpaceListElemId spaceId);
2004-02-22 18:43:20 +00:00
char *spaceList;
2004-02-22 19:02:34 +00:00
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;
};
2004-02-22 17:29:10 +00:00
2004-02-22 18:43:20 +00:00
int msgSpaceListLock(){
2004-02-22 15:37:47 +00:00
2004-02-22 19:02:34 +00:00
/*Ouverture d'un verrou d'un semafore*/
2004-02-22 19:19:49 +00:00
sem=sem_open(spaceList,O_CREAT|O_EXCL,0666,1024);
if(sem==SEM_FAILED){
2004-02-22 18:43:20 +00:00
printf("erreur de semaphore");
return -1;
}
2004-02-22 15:37:47 +00:00
2004-02-22 19:02:34 +00:00
/*Pose d'un semafore et bloque*/
2004-02-22 18:43:20 +00:00
if(sem_wait(sem)==-1){
printf("erreur pour l'ajout d'un semaphore");
return -1;
2004-02-22 15:37:47 +00:00
}
2004-02-22 18:43:20 +00:00
return 0;
2004-02-22 15:37:47 +00:00
2004-02-22 18:43:20 +00:00
}
2004-02-22 15:37:47 +00:00
2004-02-22 19:02:34 +00:00
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");
2004-02-22 18:43:20 +00:00
return -1;
}
return 0;
};
2004-02-22 19:02:34 +00:00
2004-02-22 17:40:26 +00:00
// cree un nouvel elemen
int msgSpaceListElemCreate(msgSpaceListElemId resultName,msgSpaceId spaceId){
2004-02-22 15:37:47 +00:00
return 0;
};
2004-02-22 15:37:47 +00:00
2004-02-22 18:43:20 +00:00
/*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;
}
*/
2004-02-22 15:37:47 +00:00
/* ajout dans la liste */
/*AVEC POINTEUR */
/*
2004-02-22 17:40:26 +00:00
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);
}
*/