diff --git a/src/nzg_pool.c b/src/nzg_pool.c index 124a29b..5301652 100644 --- a/src/nzg_pool.c +++ b/src/nzg_pool.c @@ -62,8 +62,10 @@ msgPool * msgPoolAllocate(int poolIdx, msgSpace *msg) { // TODO:récupérer l'id du poolData dans le msgSpace // détacher le morceau de mémoire du processus - // TODO:récupérer l'id de la pool (poolIdx) qui nous intéresse - // ouvrir la + // TODO:récupérer le poolData qui correspond à notre poolIdx. + // attacher la zone mémoire correspondant à l'Id + // utiliser des sémaphores pour vérouiller les acces en modif + // sur la poolData de notre //msgSpacePoolData spoolData; //dataId = msg->poolDataId; diff --git a/src/nzg_spaces.c b/src/nzg_spaces.c index ff9093b..60fd64c 100644 --- a/src/nzg_spaces.c +++ b/src/nzg_spaces.c @@ -1,6 +1,9 @@ #include "libnazgul.h" - -/* prototypes des fonctions annexes à ne pas exporter */ + +/* prototypes des f#define MSGSPACE_DEFAULT_MODE 0600 +#define MSGSPACE_ID_LEN 32 + +onctions annexes à ne pas exporter */ int msgSpaceIdIntern(msgSpaceId dest,const msgSpaceId src ); int msgPoolDataIdIntern(msgSpaceId dest,const msgSpaceId src ); @@ -22,16 +25,16 @@ msgSpace * msgSpaceCreate( int i; static int mSIdNum=-1; msgSpace * mSAddr; - + msgSpacePoolId poolDataId; msgPoolData * mSPoolDataAddr; - + fprintf(stderr,"Creating msgSpace with id : %s\n",spaceId); mSIdNum++; mSAddr=NULL; - /** recuperation de la liste des msgSpace **/ - /* (creation si elle n'existe pas */ + /** recuperation de la liste des msgSpace **/ + /* (creation si elle n'existe pas */ /** on créee le nouvel element **/ printf("PAGESIZE : %d\n",(int)PAGESIZE); @@ -46,7 +49,7 @@ msgSpace * msgSpaceCreate( ); if (mSFd == -1 ) { fprintf( stderr, "msgSpace %s creation failed: %s\n", - (char*)nzgId, + (char*)nzgId, strerror( errno ) ); return NULL; } @@ -57,48 +60,60 @@ msgSpace * msgSpaceCreate( strerror( errno ) ); return NULL; } - + /* Map the memory object */ mSAddr = mmap( 0, sizeof( *mSAddr ), - PROT_READ | PROT_WRITE, - MAP_SHARED, mSFd, 0 ); - if( mSAddr == MAP_FAILED ) { - fprintf( stderr, "mmap failed: %s\n", - strerror( errno ) ); - return NULL; - } + PROT_READ | PROT_WRITE, + MAP_SHARED, mSFd, 0 ); + if( mSAddr == MAP_FAILED ) { + fprintf( stderr, "mmap failed: %s\n", + strerror( errno ) ); + return NULL; + } - printf( "Map addr is 0x%08x\n", (int)mSAddr ); + printf( "Map addr is 0x%08x\n", (int)mSAddr ); - /* on ferme le descripteur du fichier */ - close(mSFd); + /* on ferme le descripteur du fichier */ + close(mSFd); - /* on remplit la structure */ - strncpy(mSAddr->id,nzgId,MSGSPACE_ID_LEN); - mSAddr->poolNb=poolNb; - mSAddr->queueNb=queueNb; - mSAddr->pid=getpid(); + /* on remplit la structure */ + strncpy(mSAddr->id,nzgId,MSGSPACE_ID_LEN); + mSAddr->poolNb=poolNb; + mSAddr->queueNb=queueNb; + mSAddr->pid=getpid(); - /* TODO: creation du poolData */ - msgPoolDataIdIntern(poolDataId,spaceId); - - - /* TODO: on ajoute spaceId a la liste des msgSpace connus */ + /* creation du poolData */ + msgPoolDataIdIntern(poolDataId,spaceId); - /* TODO: on crée queueNb files de messages */ - - /* on créer poolNb pool de buffers */ - /* et on "attache" tout ce beau monde au spaceId */ - for (i=0;i - - } - + /* TODO: on ajoute spaceId a la liste des msgSpace connus */ - /* on renvoie un pointeur sur le bon spaceId */ - return mSAddr; + /* TODO: on crée queueNb files de messages */ + + /* on créer poolNb pool de buffers */ + /* et on "attache" tout ce beau monde au spaceId */ + for (i=0;i + + } + + + /* on renvoie un pointeur sur le bon spaceId */ + return mSAddr; } @@ -126,8 +141,8 @@ int msgSpaceDelete(msgSpaceId spaceId){ if (msgSpaceIdIntern(nzgId,spaceId) == -1){ //TODO: message d'erreur return -1; - } - + } + if (shm_unlink(nzgId)<0){ perror("shm_unlink"); return -1;