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-2024 XSI.

HISTORIAL
SVr4, SUSv1, POSIX.1-2001 XSI.

  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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.