2010-07-27 18 views
7

Ho uno script che scrive su una named pipe e un'altra che legge dalla pipe. Occasionalmente, all'avvio dello script ho notato che il contenuto della pipe esiste da una precedente esecuzione dello script. C'è un modo per svuotare la pipa all'inizio della sceneggiatura?Come svuotare una pipe usando la bash

risposta

5

Credo dd è tuo amico:

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

strace mostra

open("myfifo", O_RDONLY|O_NONBLOCK) 

e in effetti non ha nemmeno bloccare su un fifo vuota.

+0

confuso, questo non è bash è vero? –

+0

Non nel senso di utilizzare comandi/funzionalità incorporati in bash, ma sicuramente nel senso di una soluzione di scripting della shell che utilizza strumenti standard unix. – mvds

1

È possibile leggere dal tubo finché non è vuoto. Questo lo svuoterà efficacemente.

Prima di provare questa impresa audace, chiamare fcntl(mypipe, F_SETFL, O_NONBLOCK) (non conosco l'equivalente dello script di shell) per eseguire una lettura quando la pipe è vuota e non appendere il programma.