es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se me niega el permiso al intentar shm_open?

Considere el siguiente programa en C:

#include <stdio.h>
#include <fcntl.h>
#include <sys mman.h="">
#include <errno.h>
#include <sys types.h="">
#include <string.h>

int main() {
    const char* name = "/memmap<em>ipc</em>shm";
    int shmFd = shm_open(name, O_RDWR | O_CREAT, 0777);
    if (shmFd < 0) {
        fprintf(stderr, "error al abrir shmfd %s: %s\n", name, strerror(errno));
        return -1;
    }
    return 0;
}

Cuando lo ejecuto en mi sistema GNU/Linux (Devuan Beowulf, Linux 5.10.0-9, CPU amd64), obtengo:

error al abrir shmfd /memmapipc_shm: Permiso denegado

¿Por qué se me niega el permiso? Estoy bastante seguro de haber seguido todas las pautas en la página man shm_open, mis permisos solicitados parecen estar bien, entonces ¿qué está mal?</string.h></errno.h></fcntl.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema podría deberse al hecho de que el archivo de memoria compartida /memmap_ipc_shm ya existe y fue creado con permisos diferentes. Cuando el programa intenta abrirlo con la bandera O_RDWR y la bandera O_CREAT, intentará crear un nuevo archivo de memoria compartida con el mismo nombre y permisos, lo que podría resultar en un error de permiso denegado.

    Para resolver este problema, es posible que desee verificar primero si el archivo de memoria compartida ya existe utilizando la función access(), y si es así, solo abrirlo con la bandera O_RDWR. De lo contrario, es posible que desee eliminar el archivo de memoria compartida existente y volver a crearlo con los permisos deseados. Además, asegúrese de que el usuario que ejecuta el programa tenga los permisos necesarios para acceder y modificar el archivo de memoria compartida.

Comments are closed.