diff --git a/src/nzg_global.h b/src/nzg_global.h index e89e4e5..34a84fa 100644 --- a/src/nzg_global.h +++ b/src/nzg_global.h @@ -8,6 +8,7 @@ #include /* pour O_RDWR */ #include #include /* shm_open */ +#include #define PAGESIZE sysconf(_SC_PAGESIZE) #endif diff --git a/src/nzg_spaces.c b/src/nzg_spaces.c index 55012b2..c3734c6 100644 --- a/src/nzg_spaces.c +++ b/src/nzg_spaces.c @@ -1,6 +1,5 @@ #include "libnazgul.h" -#include -#include + /* * spaceId : identifiant externe de l'espace de msg @@ -14,30 +13,49 @@ msgSpace * msgSpaceCreate( int queueNb, int poolNb, msgPool * queueNbCar ){ - msgSpace * result; - int shmId; msgSpaceId nzgId; msgSpaceList mSList; + int mSFd; // shm file descriptor static int mSIdNum=-1; + msgSpace * mSAddr; mSIdNum++; + mSAddr=NULL; /** recuperation de la liste des msgSpace **/ /* (creation si elle n'existe pas */ /** on créee le nouvel element **/ printf("PAGESIZE : %d\n",(int)PAGESIZE); nzgId=msgSp2nzgId(spaceId); - shmId=shm_open( + mSFd=shm_open( nzgId, - O_RDWR|O_CREAT|O_EXCL, + O_RDWR|O_CREAT|O_EXCL|O_TRUNC, MSGSPACE_DEFAULT_MODE ); - if (shmId < 0 ) { - perror("shm_open"); + if (mSFd == -1 ) { + fprintf( stderr, "msgSpace creation failed: %s\n", + strerror( errno ) ); return NULL; } + //on redimentionne l'element + if (ftruncate(mSFd, sizeof(PAGESIZE)) == -1){ + fprintf( stderr, "msgSpace resizing failed: %s\n", + 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; + } + printf( "Map addr is 0x%08x\n", mSAddr ); /* on ajoute spaceId a la liste des msgSpace connus */ /* on crée queueNb files de messages */ @@ -47,8 +65,7 @@ msgSpace * msgSpaceCreate( /* on attache tout ce beau monde au spaceId */ /* on renvoie un pointeur sur le bon spaceId */ - result=NULL; - return result; + return mSAddr; }