From 42a6fc274f0e526fb64c38d59b8871746e73ec15 Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Tue, 17 Sep 2019 08:58:16 +0200 Subject: [PATCH] Improve code (reedit) --- src/nzg_global.h | 1 + src/nzg_iface.h | 23 ++++++++++++++---- src/nzg_spaces.c | 62 +++++++++++++++++++++++++++++++++++------------- 3 files changed, 66 insertions(+), 20 deletions(-) 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_iface.h b/src/nzg_iface.h index ab20c61..b74393b 100644 --- a/src/nzg_iface.h +++ b/src/nzg_iface.h @@ -6,27 +6,42 @@ #define MSGSPACE_DEFAULT_MODE 0600 typedef char * msgSpaceId; + +typedef char * msgSpaceListId; typedef char * msgSpaceListElemId; + typedef char * msgSpacePoolDataId; typedef char * msgSpacePoolId; typedef char * msgSpaceQueueDataId; typedef char * msgSpaceQueueId; + /* pid[] */ + /* liste des processus demandeurs */ typedef struct MsgPool { - + msgSpacePoolId id; + int bufferNb; + int bufferSize; + int allocDispBuffer; + int allocOverload; } msgPool; +/* TODO: queueId */ + typedef struct MsgSpace { - + msgSpaceId id; + int poolNb; + int queueNb; + int pid; + msgSpacePoolDataId poolDataId; } msgSpace; +/* struct msgSpaceListElem * next; */ typedef struct MsgSpaceListElem { void * id; int ownerPid; - /* struct msgSpaceListElem * next; */ - msgSpaceListElemId next; + msgSpaceListElemId next; } * msgSpaceList, msgSpaceListElem; diff --git a/src/nzg_spaces.c b/src/nzg_spaces.c index 55012b2..a1ca57c 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,41 +13,71 @@ msgSpace * msgSpaceCreate( int queueNb, int poolNb, msgPool * queueNbCar ){ - msgSpace * result; - int shmId; msgSpaceId nzgId; msgSpaceList mSList; + int mSFd; // shm file descriptor + int i; 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 %s creation failed: %s\n", + (char*)nzgId, + 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; + } - /* on ajoute spaceId a la liste des msgSpace connus */ + printf( "Map addr is 0x%08x\n", (int)mSAddr ); - /* on crée queueNb files de messages */ + /* on ferme le descripteur du fichier */ + close(mSFd); - /* on créer poolNb pool de buffers */ + /* TODO: on ajoute spaceId a la liste des msgSpace connus */ - /* on attache tout ce beau monde au 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 + + } + + + /* on renvoie un pointeur sur le bon spaceId */ + return mSAddr; } @@ -80,6 +109,7 @@ msgSpaceId msgSp2nzgId(msgSpaceId spaceId){ int slen; slen=strlen(spaceId); resNzgId = (char *)malloc(sizeof(char)*(slen+11)); - sprintf(resNzgId,"/tmp/.nzg-%s",(char *)spaceId); + /* sprintf(resNzgId,"/tmp/.nzg-%s",(char *)spaceId); */ + sprintf(resNzgId,"/nzgSpace%s",(char *)spaceId); return ((msgSpaceId)resNzgId); }