SHM_OPEN(3) | Manual del Programador de Linux | SHM_OPEN(3) |
shm_open, shm_unlink - Crea/abre o borra objetos POSIX de memoria compartida
#include <sys/types.h>
#include <sys/mman.h>
int shm_open(const char *name, int oflag, mode_t mode);
int shm_unlink(const char *name);
shm_open crea y abre un nuevo, o abre uno ya existente, objeto POSIX de memoria compartida. Un objeto POSIX de memoria compartida es en efecto un manejador que puede ser utilizado por procesos no relacionados para ubicar la misma zona de memoria compartida mediante mmap(2). La función shm_unlink realiza la operación inversa, borra un objeto previamente creado con shm_open.
La operación de shm_open es análoga a la de open(2). name especifica el objeto de memoria compartida que se creará o abrirá. Para un uso portable, name debe comenzar con una barra (/) y no contener ninguna barra embebida.
oflag es una máscara de bits creada mediante una operación OR lógica de sólo una de O_RDONLY o O_RWDR y de cualquier otra opción listada aquí:
Un nuevo objeto de memoria compartida tiene longitud cero - el tamaño del objeto puede ser modificado usando ftruncate(2). (Los bytes del objeto de memoria compartida recién creado son automáticamente inicializados a 0.)
En el caso de que shm_open se complete con éxito se devuelve un nuevo descriptor de fichero que hace referencia al objeto de memoria compartida. Se garantiza que este descriptor de fichero será el descriptor de fichero con número más bajo no abierto previamente dentro del proceso. La opción FD_CLOEXEC (véase fcntl(2)) es activada para el descriptor de fichero.
El descriptor de fichero se utiliza normalmente en llamadas posteriores a to ftruncate(2) (para un objeto recién creado) y mmap(2). Después de una llamada a mmap(2) el descriptor de fichero puede ser cerrado sin afectar al mapeo de memoria.
La operación de shm_unlink es análoga a la de unlink(2): elimina un nombre de objeto de memoria compartida, y, una vez que todos los procesos han eliminado el objeto, libera y destruye el contenido de la zona de memoria asociada. Después de una llamada exitosa a shm_unlink, los intentos de abrir un objeto con shm_open que tengan el mismo nombre name fallarán (a menos que se especificara O_CREAT , en cuyo caso se crea un objeto distinto nuevo).
En caso de éxito, shm_open devuelve un descriptor de fichero no negativo. En caso de fallo, shm_open devuelve -1. shm_unlink devuelve 0 en caso de éxito, o -1 en caso de error.
En caso de fallo, errno se modifica para indicar la causa del error. Los valores que pueden aparecer en errno incluyen los siguientes:
Estas funciones están presentes en glibc 2.2 y posteriores. Los programas que usen estas funciones deben especificar la opción -lrt a cc para enlazar con la biblioteca requerida ("realtime").
POSIX deja el comportamiento de la combinación de O_RDONLY y O_TRUNC indefinido. En Linux, ésto truncará con éxito un objeto de memoria compartida - ésto puede no ser así en otros sistemas Unix.
La implementación del objeto POSIX de memoria compartida en Linux 2.4 utiliza un sistema de ficheros dedicado, que es montado habitualmente bajo /dev/shm.
POSIX 1003.1 (2001).
mmap(2), open(2), close(2), ftruncate(2), fstat(2), fchown(2), fchmod(2), umask(2), fcntl(2)
22 febrero 2002 | Linux 2.4 |