l3.libnazgul/src/bufferMap.c

48 lines
1 KiB
C
Raw Normal View History

2004-02-24 21:48:30 +00:00
#include "libnazgul.h"
2004-02-25 07:38:25 +00:00
void * msgBufferMap(msgPoolData * poolDataTab, int poolIndex, int bufferIndex) {
2004-02-24 21:48:30 +00:00
void * resultAddr;
2004-02-25 07:38:25 +00:00
int bufferSize, bufferNb;
int poolBufferTabFd;
msgPoolId poolBufferTabId;
2004-02-24 21:48:30 +00:00
// TODO: r<>cuperer l'ID du BufferInfoTab;
2004-02-25 07:38:25 +00:00
strcpy(poolBufferTabId, poolDataTab[poolIndex].poolId);
bufferSize=poolDataTab[poolIndex].bufferSize;
bufferNb=poolDataTab[poolIndex].bufferNb;
2004-02-24 21:48:30 +00:00
2004-02-25 07:38:25 +00:00
poolBufferTabFd=shm_open(poolBufferTabId,O_RDWR,SHM_DEFAULT_MODE);
if (poolBufferTabFd<0){
NZG_ERROR("shm_open",poolBufferTabId);
2004-02-24 22:04:50 +00:00
goto ERROR;
2004-02-24 21:48:30 +00:00
}
2004-02-25 07:38:25 +00:00
// 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_NONE,
MAP_SHARED,
poolBufferTabFd,
(off_t)0);
2004-02-24 21:48:30 +00:00
if(resultAddr == MAP_FAILED) {
2004-02-25 07:38:25 +00:00
NZG_ERROR("mmap", poolBufferTabId);
goto ERROR;
2004-02-24 21:48:30 +00:00
}
2004-02-25 07:38:25 +00:00
resultAddr=resultAddr +( bufferSize*bufferIndex);
mprotect(
resultAddr,
bufferSize,
PROT_READ|PROT_WRITE
);
close(poolBufferTabFd);
2004-02-24 21:48:30 +00:00
return resultAddr;
ERROR:
2004-02-25 07:38:25 +00:00
return NULL;
2004-02-24 21:48:30 +00:00
}