table of contents
- trixie 4.27.0-1
- trixie-backports 4.28.0-2~bpo13+2
- testing 4.28.0-2
- unstable 4.28.0-2
msgget(2) | System Calls Manual | msgget(2) |
NOMBRE¶
msgget - devuelve un identificador System V para una cola de mensajes
BIBLIOTECA¶
Biblioteca Estándar C (libc, -lc)
SINOPSIS¶
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
DESCRIPCIÓN¶
La llamada al sistema msgget() retorna el identificador de la cola de mensajes System V asociado con el valor del argumento key. Puede utilizarse para obtener el identificador de una cola de mensajes creada previamente, si msgflg es cero y key no tiene el valor IPC_PRIVATE, o también para crear un nuevo conjunto.
Se crea una nueva cola de mensajes si key tiene el valor IPC_PRIVATE o si key no es IPC_PRIVATE, no existe ninguna cola de mensajes con la clave key y se especifica IPC_CREAT en msgflg.
Si msgflg define tanto IPC_CREAT como IPC_EXCL y ya existe una cola de mensajes para key, msgget() falla con errno establecido en EEXIST. Es el mismo efecto que la combinación O_CREAT | O_EXCL para open(2).)
Tras la creación, los bits menos significativos del argumento msgflg definen los permisos de la cola de mensajes. Estos bits de permiso tienen el mismo formato y semántica que los permisos definidos para el argumento mode de open(2). No se usan los permisos de ejecución.
Si se crea una nueva cola de mensajes, la llamada al sistema inicializa la estructura de datos del sistema (consulte msgctl(2)) para la cola msqid_ds como se muestra:
- •
- msg_perm.cuid y msg_perm.uid son fijados al identificador del usuario efectivo del proceso invocador.
- •
- msg_perm.cgid y msg_perm.gid son fijados al identificador de grupo efectivo del proveso invocador.
- •
- Los 9 bits menos importantes de msg_perm.mode son fijados a los 9 bits menos significativos de msgflg.
- •
- msg_qnum, msg_lspid, msg_lrpid, msg_stime y msg_rtime son puestos a 0.
- •
- msg_ctime contendrá la hora actual.
- •
- msg_qbytes será igual al límite impuesto por el sistema MSGMNB.
Si la cola de mensajes ya existe, se verifican los permisos, y ser realiza una comprobación a fin de verificar si está marcada para su destrucción.
VALOR DEVUELTO¶
En caso de éxito, msgget() devuelve el identificador de la cola de mensajes (un entero no negativo). En caso de error, se devuelve -1 y se establece errno para indicar el error.
ERRORES¶
- EACCES
- Existe una cola de mensajes para key, pero el proceso que realiza la llamada no tiene permiso para acceder a ella ni la capacidad CAP_IPC_OWNER en el espacio de nombres de usuario que rige su espacio de nombres IPC.
- EEXIST
- Se definieron IPC_CREAT y IPC_EXCL en msgflg, pero ya existe una cola de mensajes para key.
- ENOENT
- No existe ninguna cola de mensajes para key y msgflg no especificó IPC_CREAT.
- ENOMEM
- Una cola de mensajes ha de ser creada pero el sistema no contiene suficiente memoria para la nueva estructura de datos.
- ENOSPC
- Una cola de mensajes ha de ser creada pero el límite del sistema para el máximo número de colas de mensajes (MSGMNI) será superado.
ESTÁNDARES¶
POSIX.1-2008.
HISTORIAL¶
POSIX.1-2001, SVr4.
Linux¶
Hasta Linux 2.3.20, Linux devolvía EIDRM para una función msgget() en una cola de mensajes programada para su eliminación.
NOTAS¶
IPC_PRIVATE no es un campo de bandera, sino un tipo key_t. Si se usa este valor especial para key, la llamada al sistema ignora todo excepto los 9 bits menos significativos de msgflg y crea una nueva cola de mensajes (en caso de éxito).
Lo siguiente es una limitación en los recursos del sistema que afecta a la llamada msgget():
- MSGMNI
- Límite de colas de mensajes en todo el sistema. Antes de Linux 3.19, el valor predeterminado se calculaba mediante una fórmula basada en la memoria disponible del sistema. A partir de Linux 3.19, el valor predeterminado es 32 000. En Linux, este límite se puede leer y modificar mediante /proc/sys/kernel/msgmni.
ERRORES¶
La elección del nombre IPC_PRIVATE puede que fuera desafortunada, IPC_NEW mostraría más claramente su función.
VÉASE TAMBIÉN¶
msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), sysvipc(7)
TRADUCCIÓN¶
La traducción al español de esta página del manual fue creada por Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>
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.
2 Mayo 2024 | Páginas de Manual de Linux 6.9.1 |