2011-10-13 992 views
6

En un cuadro de Linux, tengo un par de procesos escribiendo en un conducto con nombre y otro leyendo. Sospecho que mi lector no está al día y hay muchos datos en la cola.¿Cómo ver cuántos datos están en cola en una tubería con nombre?

¿Alguien podría decirme que hay alguna manera de verificar/ver cuántos datos están en cola en la tubería? ¿Algún comando de Linux o C API?

Gracias por su tiempo.

--KS

Respuesta

1

No creo FIONREAD funcionará como FIONREAD se determina por el valor devuelto por i_size_read que se almacena en el nodo-i como i_size. i_size no se usa con tuberías (razón por la cual stat siempre devuelve 0 para el tamaño de una tubería).

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

Debería ser posible para obtener el tamaño sumando la propiedad len de los tampones (i_node.i_pipe.bufs). Sin embargo, no parece que este valor esté expuesto por stat o ioctl.

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

0

Usted podría intentar recv (..., MSG_PEEK) - esto debe leer de la tubería sin eliminar los datos de la misma (por lo que la siguiente lectura devolvería los mismos datos). No necesariamente le informará sobre todos los datos en cola, solo algunos de ellos.

+0

¿Reac() funciona en archivos que no son de socket? – bdonlan

+0

por lo que, en general, se eliminarán los datos leídos de la tubería? – Chaitanya

Cuestiones relacionadas