#include "libnazgul.h" /* * spaceId : identifiant externe de l'espace de msg * queueNb : nombre de files de messages * poolNb : nombre de pool de buffers * queueNbCar : tableau de caracteristiques des different pool */ msgSpace * msgSpaceCreate( msgSpaceId spaceId, int queueNb, int poolNb, msgPool * queueNbCar ){ 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); msgSp2nzgId(nzgId,spaceId); printf("Id interne : %s\n",nzgId); mSFd=shm_open( nzgId, O_RDWR|O_CREAT|O_EXCL|O_TRUNC, MSGSPACE_DEFAULT_MODE ); 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(* mSAddr)) == -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", (int)mSAddr ); /* on ferme le descripteur du fichier */ close(mSFd); /* TODO: on ajoute spaceId a la liste des msgSpace connus */ /* 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; } /* * spaceId : blabla */ msgSpace * msgSpaceOpen(msgSpaceId spaceId){ int shmId; msgSpaceId nzgId; if (msgSp2nzgId(nzgId,spaceId)); if ((shmId=shm_open(nzgId,O_RDWR,MSGSPACE_DEFAULT_MODE)) < 0){ perror("shm_open"); return NULL; } return NULL; } int msgSpaceDelete(msgSpaceId spaceId){ //int shmId; msgSpaceId nzgId; if (msgSp2nzgId(nzgId,spaceId) == -1){ //TODO: message d'erreur return -1; } if (shm_unlink(nzgId)<0){ perror("shm_unlink"); return -1; }; return 0; } int msgSp2nzgId(msgSpaceId dest,const msgSpaceId src ){ if (strlen(src)>MSGSPACE_ID_LEN){ return -1; } /* sprintf(resNzgId,"/tmp/.nzg-%s",(char *)spaceId); */ #ifdef _NZG_REALFILEID sprintf(dest,"/tmp/nzgSpace%s",(char *)src); #else sprintf(dest,"/nzgSpace%s",(char *)src); #endif return 0; }