Domanda

Sto cercando di creare una coda, ma sto ottenendo un permesso negato errore. Ho ottenuto questo errore prima, ma poi ho aggiunto il codice di errore prendendo piede la creazione della chiave ed è stato lavorare. L'unica cosa che ho cambiato da allora è ho messo il mio codice di creazione della coda in una funzione separata. Qui di qualcosa di simile a ciò che il mio aspetto codice come:

key_t key1;
int msqid1;

int main(int arc, char *argv[])
{
        getKeys();            
        queueCreate();         
}

void getKeys()                  
{
        if ((key1 = ftok(".", '1')) == -1)  
        {
                perror("key1 creation");
                exit(1);
        }
}

void queueCreate()
{
        if ((msqid1 = msgget(key1, 0666 | IPC_CREAT)) == -1)
        {
                perror("msqid1 creation");
                exit(1);
        }
}

L'errore gettato è "creazione msqid1: Permesso negato". Tutte le idee?

È stato utile?

Soluzione

Molto probabilmente tu non distruggere la coda di messaggi in un'occasione è stato creato con successo, così ora non è possibile ricreare perché esiste ancora.

Non c'è indicano che la piattaforma si è in. Classicamente, utilizza il comando ipcs per ottenere lo stato dei vari sistemi IPC (memoria condivisa, i semafori e code di messaggi), e ipcrm per rimuovere i sistemi IPC che non sono più voluto.

Altri suggerimenti

Il tuo errore sembra essere EACCES e non EEXIST. La mia pagina di linux uomo dice:

  

Esiste EACCES Una coda di messaggi per la chiave, ma il processo chiamante fa   Non hanno il permesso di accedere alla coda, e non ha il   CAP_IPC_OWNER capacità.

Hai controllato per queste condizioni?

Si utilizza la directory corrente come un percorso per ftok. Forse passare a un file locale pianura in "/ tmp" e non nella vostra cartella home (NFS?).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top