SINOPSIS
nf #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>int msgctl(int msqid, int cmd, struct msqid_ds *buf);
DESCRIPCIÓN
Esta función ejecuta la operación especificada por cmd en la cola de mensajes con el identificador msqid. Valores legales para cmd son:- IPC_STAT
- Copia información desde la estructura de datos mensaje asociada con msqid en la estructura apuntada por buf. El invocador debe tener permiso de lectura en la cola de mensajes.
- IPC_SET
-
Escribe los valores de algunos miembros de la estructura
msqid_ds
apuntada por
buf
a la estructura de datos cola de mensajes, actualizando su componente
msg_ctime
Los siguientes miembros de la estructura pueden ser actualizados:
msg_perm.uid msg_perm.gid msg_perm.mode /* solo los 9 bits más bajos */ msg_qbytes
El proceso invocador debe tener los privilegios adecuados (probablemente, root) o su identificador de usuario efectivo debe ser aquel del creador (msg_perm.cuid) o del propietario (msg_perm.uid) de la cola de mensajes. Se requieres privilegios adecuados (probablemente, root) para superar el valor msg_qbytes por encima del valor del sistema MSGMNB.
- IPC_RMID
- Elimina la cola de mensajes y sus estructuras de datos asociadas despertando a todos los procesos en espera de lectura o escritura (devolviendo un valor de error y asignando a errno el valor EIDRM). El proceso invocador debe tener los privilegios adecuados (probablemente, root) o su identificador de usuario efectivo debe ser aquel del creador o del propietario de la cola de mensajes.
VALOR DEVUELTO
Si ha funcionado, el valor devuelto sera 0, en otro caso -1 con errno indicando el errorERRORES
Ante un error errno sera fijado a uno de los siguientes valores:- EACCES
- El argumento cmd es igual a IPC_STAT pero el proceso invocador no tiene permisos de lectura sobre la cola de mensajes msqid.
- EFAULT
- El argumento cmd tiene el valor IPC_SET o IPC_STAT pero la dirección apuntada por buf no es accesible.
- EIDRM
- La cola de mensajes ha sido eliminada.
- EINVAL
- Valor incorrecto de cmd o msqid.
- EPERM
- El argumento cmd tiene el valor IPC_SET o IPC_RMID pero el proceso invocador no tiene suficientes privilegios para ejecutar la orden.
OBSERVACIONES
Las llamadas IPC_INFO, MSG_STAT y MSG_INFO son utilizadas por el programa ipcs(8) a fin de proporcionar información de los recursos asignados. En el futuro esto puede ser modificado segun las necesitades o trasladado al interfaz /proc.Varios campos de la estructura msqid_ds eran de tipo entero corto bajo Linux 2.2 y se convirtieron a enteros largos bajo Linux 2.4. Para sacar provecho de ésto, una recompilación bajo glibc-2.1.91 o una versión posterior debería bastar. (El núcleo distingue las llamadas antiguas de las nuevas por una bandera IPC_64 en cmd.)