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:
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; 
}
KEY è una macro definita in questo modo: ftok("./tmp", 'A').
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?