# include "libnazgul.h" /* pid[] liste process demandeurs */ int msgPoolCreate( msgSpacePoolId poolId, int buffNb, int buffSize ) { int poolFd; static int poolNb; msgSpacePoolId id; sem_t * sem; if (msgSpacePoolId2nzgPoolId(id,poolId,poolNb) == -1){ fprintf( stderr, "msgPoolId creation failed for id %s\n", (char*)poolId ); return -1; } poolFd=shm_open(id,O_RDWR|O_CREAT|O_EXCL|O_TRUNC,MSGSPACE_DEFAULT_MODE); if (poolFd == -1 ) { fprintf( stderr, "msgPool creation failed: %s\n", strerror( errno ) ); return -1; } // on met un semaphore sur le pool sem = sem_open(id, O_CREAT|O_EXCL, 0666, buffNb); // on met le pool a la taille voulue pour qu'il // puisse contenir les buffs if (ftruncate(poolFd, (buffSize*buffNb)) == -1){ fprintf( stderr, "msgPool resizing failed: %s\n", strerror( errno ) ); return -1; } close(poolFd); return 0; } int msgSpacePoolId2nzgPoolId(msgSpacePoolId dest,msgSpacePoolId src, int num){ if (strlen(src)>MSGSPACE_ID_LEN){ return -1; } #ifdef _NZG_REALFILEID sprintf(dest,"/tmp/nzgSpacePool%s%d",(char *)src,num); #else sprintf(dest,"/nzgSpacePool%s%d",(char *)src,num); #endif return 0; }