#include "libnazgul.h" int msgBufferGetFreeIndex(msgPoolData * poolDataTabAddr, int poolIndex) { msgBufferInfoTabId bufferInfoTabId; int bufferInfoTabFd; msgBufferInfo *bufferInfoTabAddr; int bufferInfoNb; int bufferFreeIndex; int i; //récuperer l'ID du BufferInfoTab; strcpy(bufferInfoTabId, poolDataTabAddr[poolIndex].bufferInfoTabId); bufferInfoTabFd = shm_open(bufferInfoTabId, O_RDWR, SHM_DEFAULT_MODE); if (bufferInfoTabFd < 0) { NZG_ERROR("shm_open", bufferInfoTabId); return -1; } /** on regarde dans le tableau d'infos de buffer **/ bufferInfoNb = poolDataTabAddr[poolIndex].bufferNb; bufferInfoTabAddr = mmap(NULL, bufferInfoNb * sizeof(msgBufferInfo), PROT_READ, MAP_SHARED, bufferInfoTabFd, (off_t) 0); i = 0; while ((i < bufferInfoNb) && (bufferInfoTabAddr[i].ownerPid != (pid_t) - 1)) { i++; } if (i == bufferInfoNb) { return -1; } bufferFreeIndex = i; if (munmap(bufferInfoTabAddr, bufferInfoNb * sizeof(msgBufferInfo)) < 0) { NZG_ERROR("munmap", bufferInfoTabId); return -1; } return bufferFreeIndex; }