Se sei abbastanza fortunato da usare HP-UX , il comando pipcs
(PDF) (scusate collegamento interrotto, nessun archivio corrente , vedere invece questa pagina man su unix.com) esegue l'equivalente POSIX dell'IPC SysV ipcs
comando. Purtroppo, non è mai apparso per altri sistemi operativi. L'attuale (gennaio 2021) pacchetto util-linux che fornisce ipcs
menziona a malapena le code POSIX.
Se hai mqueue
montato su /dev/mqueue
, cos'è è supportato sta leggendo i metadati per una coda esistente come file:
[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
Il QSIZE
purtroppo è solo la dimensione in byte, non i messaggi; su Linux non c'è (per ora, kernel 5.4) nessun campo per il conteggio dei messaggi, a differenza di FreeBSD che fornisce un CURMSG
valore:
[email protected] $ cat /mnt/mqueue/myQ
QSIZE:0 MAXMSG:32 CURMSG:0 MSGSIZE:1024
Quindi la risposta dovrebbe be "monta mqueue FS e usa cat
", ma non è :(
(Il montaggio di mqueue FS non è un prerequisito per l'utilizzo dell'API MQ, ti consente solo di fare alcune cose "tutto è un file".)
C'è una buona copertura delle code di messaggi nel libro The Linux Programming Interface , incluso il codice sorgente C per vari strumenti CLI per creare, ispezionare e utilizzare le code dei messaggi. Fortunatamente il capitolo 52 del libro che tratta questo argomento è attualmente disponibile per il download gratuito. Vedi pmsg_getattr.c
.
Il codice di riferimento canonico da Unix Network Programming (Vol 2) 2nd Ed. di Stephen (1999) è disponibile qui, fornisce tra l'altro mqgetattr
che farà anche il lavoro (anche se probabilmente dovrai massaggiare un paio di righe nel config.h
di livello superiore , il #define
's per vari uint
i tipi sono in conflitto con le intestazioni di sistema Unix contemporanee).
Ci sono anche moduli Ruby, Perl e TCL per questo, quello Ruby ha un posix-mq-rb
strumento CLI.
$ ipcs -q
fornirà le statistiche sulla coda dei messaggi dalla riga di comando.
$ ipcs -m
fornirà statistiche sulla memoria condivisa dalla riga di comando.
$ ipcs
fornirà tutte le statistiche del meccanismo ipc.
Non conosco alcun comando ma esiste una chiamata di funzione libc che può ottenere le statistiche:
uomo 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 */
};