Pokud máte to štěstí, že používáte HP-UX , příkaz pipcs
(PDF) (omlouváme se, že odkaz nefunguje, žádný aktuální archiv , podívejte se místo toho na tuto manuálovou stránku na unix.com) provádí ekvivalent POSIX k SysV IPC ipcs
příkaz. Bohužel se nikdy neobjevil pro jiné OS. Aktuální (leden 2021) balíček util-linux, který poskytuje ipcs
stěží zmiňuje POSIX mqueues.
Pokud máte mqueue
namontovaný na /dev/mqueue
, co je podporováno je čtení metadat pro existující frontu jako soubor:
[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
QSIZE
je bohužel pouze velikost v bajtech, nikoli zprávy; na Linuxu není (zatím, jádro 5.4) žádné pole počtu zpráv – na rozdíl od FreeBSD který poskytuje CURMSG
hodnota:
[email protected] $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Takže odpověď měla by být "připojte mqueue FS a použijte cat
", ale není :(
(Připojení mqueue FS není nezbytným předpokladem pro použití MQ API, jen vám umožňuje dělat nějaké věci „vše je soubor“.)
V knize The Linux Programming Interface je dobré pokrytí front zpráv , včetně zdrojového kódu C pro různé nástroje CLI pro vytváření, kontrolu a používání front zpráv. Naštěstí je v současné době zdarma ke stažení kapitola 52 knihy, která pokrývá toto téma. Viz pmsg_getattr.c
.
Kanonický referenční kód od Stephena Unix Network Programming (Vol 2) 2nd Ed. (1999) je k dispozici zde, poskytuje mimo jiné mqgetattr
což také udělá práci (ačkoli budete pravděpodobně muset masírovat několik řádků v nejvyšší úrovni config.h
, #define
's pro různé uint
typy jsou v konfliktu se současnými hlavičkami unixového systému).
K tomu existují také moduly Ruby, Perl a TCL, ten Ruby je dodáván s posix-mq-rb
nástroj CLI.
$ ipcs -q
poskytne statistiky fronty zpráv z příkazového řádku.
$ ipcs -m
poskytne statistiky sdílené paměti z příkazového řádku.
$ ipcs
poskytne všechny statistiky mechanismu ipc.
Neznám žádný příkaz, ale existuje volání funkce libc, které může získat statistiky:
man 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 */
};