#include #include "libnazgul.h" void usage(char * myname){ printf("Usage: %s [--all | msgSpaceId1 msgSpaceId2 ... ]\n",myname); } int about(char * spaceId){ msgPoolDataTabSemId ressourceSemId; sem_t * ressourceSemFd; int i; msgPoolData * poolDataTab; msgSpace * space; int ressourceSemVal; if (strlen(spaceId)> MSGSPACE_ID_LEN){ //verif de la longueur fprintf(stderr,"Too long ident : %s\n",spaceId); goto ERROR; } else { int err; msgSpaceListLock(); err=msgSpaceListFindId(spaceId); msgSpaceListUnlock(); if (err < 1){ if (err==0){ // le msgSpace existe space=msgSpaceOpen(spaceId); // on lit les informations sur le msgSpace // les pool for (i=0;ipoolNb;i++){ msgPoolSemIdIntern(ressourceSemId,space->externId,i); ressourceSemFd = sem_open(ressourceSemId,O_CREAT,SEM_DEFAULT_MODE,0); if (ressourceSemFd == SEM_FAILED){ NZG_ERROR("sem_open",ressourceSemId); goto ERROR; } if (sem_getvalue(ressourceSemFd, &ressourceSemVal) < 0){ NZG_ERROR("sem_getvalue",ressourceSemId); goto ERROR; } msgPoolDataTabLock(space); poolDataTab= msgPoolDataTabOpen(space); // donner le nombre de buffer disponibles printf("- %d/%d free buffers in pool #%d\n", ressourceSemVal, poolDataTab[i].bufferNb, i); msgPoolDataTabClose(space,poolDataTab); msgPoolDataTabUnlock(space); if(sem_close(ressourceSemFd) <0){ NZG_ERROR("sem_getvalue",ressourceSemId); goto ERROR; } // pour chaque buffer, dire s'il est libre ou pas // et le processus/addresse associé } msgSpaceClose(space); } else { // zut, il y a soit une erreur NZG_ERROR("spaceListFindId : error ",spaceId); } } else { // on quitte : l'element n'existe fprintf(stderr,"Ident %s does not exist.\n",spaceId); } } return 0; ERROR: return -1; } int main(int argc,char **argv){ printf("Args %d\n",argc); if (argc<2){ usage(argv[0]); }else { if (argc==2){ if (strcmp("--all",argv[1])==0){ // listing printf("[ Listing of msgSpaces ]\n"); } else { // only one msgSpaceId printf("[ About %s ]\n",argv[1]); about(argv[1]); } } else { int i; for (i=1;i