2010-07-27 14 views
7

Tengo una secuencia de comandos que escribe en una tubería con nombre y otra que lee desde la tubería. Ocasionalmente, al iniciar el script, he notado que el contenido del conducto existe a partir de una ejecución previa del script. ¿Hay alguna forma de eliminar la tubería al comienzo del script?Cómo vaciar una tubería usando bash

Respuesta

5

Creo dd es su amigo:

dd if=myfifo iflag=nonblock of=/dev/null 

strace muestra

open("myfifo", O_RDONLY|O_NONBLOCK) 

y de hecho ni siquiera tiene el bloque en una FIFO vacía.

+0

confundido, esto no es fiesta es? –

+0

No en el sentido de utilizar comandos/funciones bash-built-in, pero definitivamente en el sentido de una solución de creación de scripts utilizando herramientas estándar de Unix. – mvds

1

Puede leer desde la tubería hasta que esté vacía. Esto efectivamente lo vaciará.

Antes de intentar esta atrevida proeza, llame al fcntl(mypipe, F_SETFL, O_NONBLOCK) (no conozco el equivalente del script de shell) para hacer una lectura cuando la tubería está vacía, no cuelgue su programa.

Cuestiones relacionadas