table of contents
SHM_OPEN(3) | Manual del Programador de Linux | SHM_OPEN(3) |
NOMBRE¶
shm_open, shm_unlink - crea/abre o borra objetos POSIX de memoria compartida
SINOPSIS¶
#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */
int shm_open(const char *name, int oflag, mode_t mode);
int shm_unlink(const char *name);
Enlazar con -lrt.
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().
The operation of shm_open() is analogous to that of open(2). name specifies the shared memory object to be created or opened. For portable use, a shared memory object should be identified by a name of the form /somename; that is, a null-terminated string of up to NAME_MAX (i.e., 255) characters consisting of an initial slash, followed by one or more characters, none of which are slashes.
oflag es una máscara de bits creada mediante una operación OR lógica de sólo una de O_RDONLY o O_RDWR 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
- Create the shared memory object if it does not exist. The user and group ownership of the object are taken from the corresponding effective IDs of the calling process, and the object's permission bits are set according to the low-order 9 bits of mode, except that those bits set in the process file mode creation mask (see umask(2)) are cleared for the new object. A set of macro constants which can be used to define mode is listed in open(2). (Symbolic definitions of these constants can be obtained by including <sys/stat.h>.)
- 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.
Definitions of these flag values can be obtained by including <fcntl.h>.
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 para borrar el objeto de memoria compartida con shm_unlink().
- 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.
- 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
- Se ha alcanzado el límite de descriptores de archivo abiertos para cada proceso.
- ENAMETOOLONG
- La longitud de name excede PATH_MAX.
- ENFILE
- Se ha alcanzado el límite máximo de archivos abiertos para el conjunto del sistema.
- 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.
VERSIONES¶
These functions are provided in glibc 2.2 and later.
ATRIBUTOS¶
Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
Interfaz | Atributo | Valor |
shm_open(), shm_unlink() | Seguridad del hilo | Configuración regional de multi-hilo seguro |
CONFORME A¶
POSIX.1-2001, POSIX.1-2008.
POSIX.1-2001 says that the group ownership of a newly created shared memory object is set to either the calling process's effective group ID or "a system default group ID". POSIX.1-2008 says that the group ownership may be set to either the calling process's effective group ID or, if the object is visible in the filesystem, the group ID of the parent directory.
NOTAS¶
POSIX leaves the behavior of the combination of O_RDONLY and O_TRUNC unspecified. On Linux, this will successfully truncate an existing shared memory object—this may not be so on other UNIX systems.
The POSIX shared memory object implementation on Linux makes use of a dedicated tmpfs(5) filesystem that is normally mounted under /dev/shm.
VÉASE TAMBIÉN¶
close(2), fchmod(2), fchown(2), fcntl(2), fstat(2), ftruncate(2), memfd_create(2), mmap(2), open(2), umask(2), shm_overview(7)
COLOFÓN¶
Esta página es parte de la versión 4.16 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.
TRADUCCIÓN¶
La traducción al español de esta página del manual fue creada por Miguel Pérez Ibars <mpi79470@alu.um.es>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.
15 Septiembre 2017 | Linux |