Pregunta

Estoy intentando crear una cola, pero estoy consiguiendo un error de permiso denegado. Tengo este error antes, pero luego he añadido el código de error en la captura de creación de claves y se trabaja. La única cosa que he cambiado desde entonces es que puse mi código de creación de colas en una función separada. de aquí algo así como lo que mis código es el siguiente:

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);
        }
}

El error que se produce es la "creación msqid1: Permiso denegado". Algunas ideas?

¿Fue útil?

Solución

Lo más probable es que no destruyeron la cola de mensajes en una ocasión que se ha creado correctamente, por lo que ahora no se puede volver a crearlo, ya que todavía existe.

no indican qué plataforma que se encuentra. Clásicamente, tendrá que utilizar el comando ipcs para obtener el estado de los diversos sistemas de IPC (memoria compartida, semáforos y colas de mensajes), y ipcrm para eliminar los sistemas de IPC que ya no se querían.

Otros consejos

Su error parece ser EACCES y no EEXIST. Mi página de manual de Linux dice:

  

EACCES Existe una cola de mensajes para key, pero el proceso invocador   no tiene permiso para acceder a la cola, y no tiene la   CAP_IPC_OWNER capacidad.

¿verificó si estas condiciones?

Se utiliza el directorio actual como un camino para ftok. Tal vez cambiar a un archivo local sin formato en "/ tmp" y no en la carpeta de inicio (NFS?).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top