#include "libnazgul.h" #include "ids.h" int msgPoolCreate(msgSpaceId externId, int poolIdx, int buffNb, int buffSize) { int poolFd; sem_t *ressourceSemFd; msgPoolId poolId; msgPoolSemId poolRessourceSemId; /* creation des buffers DEBUT */ if (msgPoolIdIntern(poolId, externId, poolIdx) == -1) { fprintf(stderr, "msgPoolId creation failed for id %s\n", (char *)poolId); return -1; } poolFd = shm_open(poolId, O_RDWR | O_CREAT | O_EXCL | O_TRUNC, MSGSPACE_DEFAULT_MODE); if (poolFd == -1) { fprintf(stderr, "msgPool : %s creation failed: %s\n", poolId, strerror(errno)); return -1; } if (ftruncate(poolFd, (buffSize * buffNb)) == -1) { fprintf(stderr, "msgPool resizing failed: %s\n", strerror(errno)); return -1; } /* creation des buffers FIN */ if (msgPoolSemIdIntern(poolRessourceSemId, externId, poolIdx) == -1) { fprintf(stderr, "msgPoolId creation failed for id %s\n", (char *)poolRessourceSemId); return -1; } // on met un semaphore sur le pool ressourceSemFd = sem_open(poolRessourceSemId, O_CREAT | O_EXCL, SEM_DEFAULT_MODE, buffNb); if (ressourceSemFd == SEM_FAILED) { NZG_ERROR("sem_open : creation de la ressource", poolRessourceSemId); goto ERROR; } else { printf("[ Created %s with %d ressources ]\n", poolRessourceSemId, buffNb); } //TODO: verrifier les erreurs sur l'ouverture de la sem sem_close(ressourceSemFd); // on met le pool a la taille voulue pour qu'il // puisse contenir les buffs close(poolFd); return 0; ERROR: return -1; }