Provided by:
manpages-es_1.55-10_all 
NOMBRE
shm_open, shm_unlink - Crea/abre o borra objetos POSIX de memoria
compartida
SINOPSIS
#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);
DESCRIPCI'ON
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
funcion shm_unlink realiza la operacion inversa, borra un objeto
previamente creado con shm_open.
La operacion de shm_open es analoga a la de open(2). name especifica
el objeto de memoria compartida que se creara o abrira. Para un uso
portable, name debe comenzar con una barra (/) y no contener ninguna
barra embebida.
oflag es una mascara de bits creada mediante una operacion OR logica de
solo una de O_RDONLY o O_RWDR y de cualquier otra opcion listada aqui:
O_RDONLY Abre el objeto para lectura. Un objeto de memoria
compartida abierto de esta manera solo puede ser ubicado con
mmap(2) para acceso de lectura (PROT_READ).
O_RDWR Abre el objeto para lectura-escritura.
O_CREAT Crea el objeto de memoria compartida si no existe. El
usuario y grupo propietario del objeto son establecidos de
igual manera que para open(2), y los bits de permisos del
objeto son establecidos segun los 9 bits de orden inferior
de mode, salvo que aquellos bits activos en la mascara de
modo de creacion de ficheros del proceso (vease umask(2))
esten desactivados para el nuevo objeto. (Una lista de
macros que pueden ser utilizadas para definir mode se puede
encontrar en open(2).)
Un nuevo objeto de memoria compartida tiene longitud cero -
el tamano del objeto puede ser modificado usando
ftruncate(2). (Los bytes del objeto de memoria compartida
recien creado son automaticamente inicializados a 0.)
O_EXCL Si O_CREAT fue especificado tambien, y ya existe un objeto
de memoria compartida con el nombre dado name , se devuelve
un error. La comprobacion de la existencia del objeto, y su
creacion si no existe, se hacen de manera atomica.
O_TRUNC Si el objeto de memoria compartida ya existe, lo trunca a
cero bytes.
En el caso de que shm_open se complete con exito se devuelve un nuevo
descriptor de fichero que hace referencia al objeto de memoria
compartida. Se garantiza que este descriptor de fichero sera el
descriptor de fichero con numero mas bajo no abierto previamente dentro
del proceso. La opcion FD_CLOEXEC (vease 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 recien creado) y mmap(2). Despues de
una llamada a mmap(2) el descriptor de fichero puede ser cerrado sin
afectar al mapeo de memoria.
La operacion de shm_unlink es analoga 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. Despues de una llamada exitosa a shm_unlink,
los intentos de abrir un objeto con shm_open que tengan el mismo nombre
name fallaran (a menos que se especificara O_CREAT , en cuyo caso se
crea un objeto distinto nuevo).
VALOR DEVUELTO
En caso de exito, shm_open devuelve un descriptor de fichero no
negativo. En caso de fallo, shm_open devuelve -1. shm_unlink devuelve
0 en caso de exito, o -1 en caso de error.
ERRORES
En caso de fallo, errno se modifica para indicar la causa del error.
Los valores que pueden aparecer en errno incluyen los siguientes:
EACCES Se denego el acceso a name en shm_open en el modo mode
especificado, o se especifico la opcion O_TRUNC y el invocador
no tiene permisos de escritura sobre el objeto.
EACCES Se denego el acceso para borrar el objeto de memoria compartida
con shm_unlink.
EEXIST Se especificaron las opciones O_CREAT y O_EXCL a la funcion
shm_open y el objeto de memoria compartida especificado por name
ya existe.
EINVAL El argumento name para la funcion shm_open es invalido.
EMFILE El proceso ya ha alcanzado el numero maximo de ficheros
abiertos.
ENAMETOOLONG
La longitud de name excede PATH_MAX.
ENFILE El limite en el numero total de ficheros abiertos en el sistema
ha sido alcanzado.
ENOENT Se llamo a shm_open con un nombre name que no existe, y no se
especifico la opcion O_CREAT.
ENOENT Se llamo a shm_unlink con un nombre name que no existe.
OBSERVACIONES
Estas funciones estan presentes en glibc 2.2 y posteriores. Los
programas que usen estas funciones deben especificar la opcion -lrt a
cc para enlazar con la biblioteca requerida ("realtime").
POSIX deja el comportamiento de la combinacion de O_RDONLY y O_TRUNC
indefinido. En Linux, esto truncara con exito un objeto de memoria
compartida - esto puede no ser asi en otros sistemas Unix.
La implementacion del objeto POSIX de memoria compartida en Linux 2.4
utiliza un sistema de ficheros dedicado, que es montado habitualmente
bajo /dev/shm.
CONFORME A
POSIX 1003.1 (2001).
V'EASE TAMBI'EN
mmap(2), open(2), close(2), ftruncate(2), fstat(2), fchown(2),
fchmod(2), umask(2), fcntl(2)