l3.libnazgul/src/bufferMap.c

51 lines
1.4 KiB
C
Raw Normal View History

2004-02-24 21:48:30 +00:00
#include "libnazgul.h"
2020-03-03 23:06:43 +00:00
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<6E>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;
2004-02-24 21:48:30 +00:00
}