NOMBRE¶
msgctl - operaciones para el control de mensajes
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 error
ERRORES¶
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.)
SVr4, SVID. SVID no documenta el error EIDRM.
VÉASE TAMBIÉN¶
ipc(5),
msgget(2),
msgsnd(2),
msgrcv(2)