#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; if (bufferNb < 0) { // do something with 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 %p to %p\n", (void *)resultAddr, (void *)(resultAddr + bufferSize * (bufferIndex + 1)) ); resultAddr = resultAddr + (bufferSize * bufferIndex); printf("Moved to %p\n", (void *)resultAddr); /* mprotect( resultAddr, bufferSize, PROT_READ|PROT_WRITE ); */ close(poolBufferTabFd); return resultAddr; ERROR: return NULL; }