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)

Linux 2.4                                        22 febrero 2002                                     SHM_OPEN(3)