C permiso denegado para la creación de colas
-
26-09-2019 - |
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?
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?).