#include "libnazgul.h" void * msgBufferMap(msgPoolData * poolDataTab, int poolIndex, int bufferIndex) { void * resultAddr; int bufferSize, bufferNb; int poolBufferTabFd; msgPoolId poolBufferTabId; printf("Mapping buffer (%d,%d)\n",poolIndex,bufferIndex); // TODO: récuperer l'ID du BufferInfoTab; strcpy(poolBufferTabId, poolDataTab[poolIndex].poolId); bufferSize=poolDataTab[poolIndex].bufferSize; bufferNb=poolDataTab[poolIndex].bufferNb; poolBufferTabFd=shm_open(poolBufferTabId,O_RDWR,SHM_DEFAULT_MODE); if (poolBufferTabFd<0){ NZG_ERROR("shm_open",poolBufferTabId); goto ERROR; } // mapper le buffer dans l'espace mémoire du processus /* on s'arrete juste derriere l'index qui nous intéresse */ resultAddr=mmap(NULL, bufferSize*(bufferIndex+1), PROT_READ|PROT_WRITE, //PROT_NONE MAP_SHARED, poolBufferTabFd, (off_t)0); if(resultAddr == MAP_FAILED) { NZG_ERROR("mmap", poolBufferTabId); goto ERROR; } printf( "Mapped from 0x%08x to 0x%08x\n", (int)resultAddr, (int)resultAddr+ bufferSize*(bufferIndex+1) ); resultAddr=resultAddr +( bufferSize*bufferIndex); printf( "Moved to 0x%08x\n",(int)resultAddr ); /* mprotect( resultAddr, bufferSize, PROT_READ|PROT_WRITE );*/ close(poolBufferTabFd); return resultAddr; ERROR: return NULL; }