Si tiene la suerte de utilizar HP-UX , el comando pipcs
(PDF) (lo siento enlace roto, no hay archivo actual , vea esta página del manual en unix.com en su lugar) realiza el equivalente POSIX al SysV IPC ipcs
dominio. Lamentablemente, nunca ha aparecido para otros sistemas operativos. El paquete util-linux actual (enero de 2021) que proporciona ipcs
apenas menciona mqueues POSIX.
Si tienes mqueue
montado en /dev/mqueue
, qué es admitido es la lectura de metadatos para una cola existente como un archivo:
[email protected] $ sudo mount -t mqueue mqueue /dev/mqueue
[email protected] $ mq_create -c /myQ
[email protected] $ cat /dev/mqueue/myQ
QSIZE:0 NOTIFY:0 SIGNO:0 NOTIFY_PID:0
Los QSIZE
lamentablemente es solo el tamaño en bytes, no en mensajes; en Linux no hay (hasta ahora, kernel 5.4) ningún campo de recuento de mensajes, a diferencia de FreeBSD que proporciona un CURMSG
valor:
[email protected] $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Así que la respuesta debería ser "montar mqueue FS y usar cat
", pero no lo es :(
(Montar mqueue FS no es un requisito previo para usar la API de MQ, solo le permite hacer algunas cosas de "todo es un archivo").
Hay una buena cobertura de las colas de mensajes en el libro La interfaz de programación de Linux , incluido el código fuente C para varias herramientas CLI para crear, inspeccionar y usar colas de mensajes. Afortunadamente, el capítulo 52 del libro que cubre este tema está actualmente disponible para descargar de forma gratuita. Ver pmsg_getattr.c
.
El código de referencia canónico de Stephen's Programación de red Unix (Vol 2) 2nd Ed. (1999) está disponible aquí, proporciona, entre otras cosas, mqgetattr
que también hará el trabajo (aunque es probable que necesite masajear un par de líneas en el nivel superior config.h
, el #define
para varios uint
los tipos entran en conflicto con los encabezados del sistema Unix contemporáneo).
También hay módulos Ruby, Perl y TCL para esto, el de Ruby viene con un posix-mq-rb
Herramienta CLI.
$ ipcs -q
proporcionará estadísticas de la cola de mensajes desde la línea de comandos.
$ ipcs -m
proporcionará estadísticas de memoria compartida desde la línea de comandos.
$ ipcs
proporcionará todas las estadísticas del mecanismo ipc.
No conozco ningún comando, pero existe una llamada a la función libc que puede obtener las estadísticas:
hombre 3 mq_getattr
mq_getattr() returns an mq_attr structure in the buffer pointed by
attr. This structure is defined as:
struct mq_attr {
long mq_flags; /* Flags: 0 or O_NONBLOCK */
long mq_maxmsg; /* Max. # of messages on queue */
long mq_msgsize; /* Max. message size (bytes) */
long mq_curmsgs; /* # of messages currently in queue */
};