¿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>
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 banderaO_RDWR
y la banderaO_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 banderaO_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.