Provided by: manpages-es_1.55-10_all bug

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ÓN

       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í:

       O_RDONLY   Abre el objeto para lectura.  Un objeto de memoria compartida abierto  de  esta
                  manera sólo 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 según los 9 bits de orden inferior
                  de mode, salvo que aquellos bits activos en la máscara de modo de  creación  de
                  ficheros  del proceso (véase umask(2)) estén 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 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.)

       O_EXCL     Si  O_CREAT  fue  especificado  también,  y  ya  existe  un  objeto  de memoria
                  compartida con el nombre dado name , se devuelve un error.  La comprobación  de
                  la  existencia  del  objeto,  y  su  creación  si no existe, se hacen de manera
                  atómica.

       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  é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).

VALOR DEVUELTO

       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.

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 denegó el acceso a  name  en  shm_open  en  el  modo  mode  especificado,  o  se
              especificó la opción O_TRUNC y el invocador no tiene permisos de escritura sobre el
              objeto.

       EACCES Se denegó el acceso para borrar el objeto de memoria compartida con shm_unlink.

       EEXIST Se especificaron las opciones O_CREAT y O_EXCL a la función shm_open y el objeto de
              memoria compartida especificado por name ya existe.

       EINVAL El argumento name para la función shm_open es inválido.

       EMFILE El proceso ya ha alcanzado el número máximo de ficheros abiertos.

       ENAMETOOLONG
              La longitud de name excede PATH_MAX.

       ENFILE El límite en el número total de ficheros abiertos en el sistema ha sido alcanzado.

       ENOENT Se  llamó a shm_open con un nombre name que no existe, y no se especificó la opción
              O_CREAT.

       ENOENT Se llamó a shm_unlink con un nombre name que no existe.

OBSERVACIONES

       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.

CONFORME A

       POSIX 1003.1 (2001).

VÉASE TAMBIÉN

       mmap(2),  open(2),  close(2),  ftruncate(2),  fstat(2),  fchown(2),  fchmod(2),  umask(2),
       fcntl(2)