Ciao a tutti, ho un problema con i semafori. Ho progettato un'applicazione multi-server/multi-client, e ho problemi con l'accesso ai semafori quando i server sono più di due.
Il codice relativo al server che crea ed inizializza i semafori prevede una funzione da me implementata, che non fa altro che chiamare la semget e la semctl su tutti i semafori:
KEY è una macro definita in questo modo: ftok("./tmp", 'A').codice:int seminit(){ int id; /*id dei semafori*/ union semun { int val; struct semid_ds *buf; ushort * array; } argument; id = semget(KEY, 2, 0666 | IPC_CREAT); if(id < 0){ perror("Impossibile ottenere id semafori"); return -1; } /*Inizializzazione semafori al valore 0*/ if( semctl(id, WAIT_MSG, SETVAL, 0) < 0) perror("Inizializzazione semaforo non riuscita"); if( semctl(id, WAIT_RES, SETVAL, 0) < 0) perror("Inizializzazione semaforo non riuscita"); return id; }
Di tanto in tanto, sopratutto in fase di test, il server si arrestava erroneamente, non eliminando il set di semafori creato. Dunque ho cambiato più volte la 'A' in altre lettere, e tutto si è sistemato. Ora però, avviando con 3 server e cambiano nuovamente il secondo parametro di ftok, l'errore permane: semget ritorna con l'errno settata a "Permission Denied".
Il server una volta avviato esegue questo frammento di pseudocode, arrestandosi con errore al ritorno di seminit():
codice://Controllo dei parametri e gestione errore semid = seminit(); if(semid < 0){ //gestione errore return -1; }
Tuttavia dando il comando ipcs -s da teminale, non ci sono semafori attivi, quindi non riesco proprio a spiegarmi il perchè! Qualcuno potrebbe aiutarmi? Potrebbe essere un problema di permessi?

Rispondi quotando