2011-10-13 9 views
6

In una macchina Linux, ho un paio di processi che scrivono su una named pipe e un'altra che la legge. Sospetto che il mio lettore non stia tenendo il passo e ci sono molti dati in coda nella pipe.Come vedere quanti dati vengono messi in coda in una named pipe?

Qualcuno potrebbe dirmi, c'è un modo per controllare/vedere quanti dati vengono messi in coda nella pipe? Qualche comando Linux o C API?

Grazie per il vostro tempo.

--KS

risposta

1

Non credo FIONREAD funzionerà come FIONREAD è determinato dal valore restituito da i_size_read che è memorizzato nell'inode come i_size. i_size non viene utilizzato con pipe (motivo per cui stat restituisce sempre 0 per le dimensioni di una pipe).

http://lxr.free-electrons.com/source/include/linux/fs.h#L848

Dovrebbe essere possibile ottenere la dimensione sommando proprietà len dei buffer (i_node.i_pipe.bufs). Non sembra però che questo valore sia esposto da stat o ioctl.

https://github.com/mirrors/linux-2.6/blob/master/fs/pipe.c

0

Si potrebbe provare a recv (..., MSG_PEEK) - questo dovrebbe leggere dal tubo senza rimuovere i dati da esso (così la prossima lettura restituirebbe gli stessi dati). Non ti dirà necessariamente di tutti i dati in coda, solo alcuni di essi.

+0

recv() funziona su file non socket? – bdonlan

+0

quindi, in generale, i dati letti dalla pipe verranno rimossi? – Chaitanya

Problemi correlati