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'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)