Some years back I created a little FIFO-reader utility that can be used to relay data via a named pipe (FIFO) such that it keeps the output end of the FIFO open despite multiple opens/closes of the input end by one or more writers.
This is necessary because the naive approach only works once, as illustrated here: # mknod /tmp/FIFO p # (could also have used mkfifo) # cat /tmp/FIFO & # Have an instance of cat waiting for data. [1] 25868 # (bash confirms backgrounded process) # date > /tmp/FIFO # 1st date opens FIFO, writes it, closes it. Wed Jul 14 11:45:04 EDT 2010 # cat shows data but exits as next read() = 0. [1]- Done cat /tmp/FIFO # (bash confirms exit of backgrounded process) # date > /tmp/FIFO # 2nd date hangs - nobody reading the FIFO.... If I had used my FIFO-reader utility instead of cat in this example I could have had as many instances of date (or whatever) spewing sequentially into the FIFO and it would have relayed everything and none of the writers would have blocked. I'm now working with a cantankerous old app that can't easily be modified and it'd be handy to have multiple sequential invocations of that app each spew some logging data into a FIFO (without blocking) so it could be processed by a single persistent instance of a filter connected to the output of that FIFO. I'm therefore about to dredge up my little utility and put it back into service in this situation but before I do I wonder if anybody knows of something that's part of the standard Gnu/Linux stuff that already solves this problem. I thought I'd recently heard that some surprisingly complex options are/were being added to cat and half expected to find this behavior is now an option, but maybe that was just some smarta** taking a cheap-shot at the Gnu folks... _______________________________________________ gnhlug-discuss mailing list gnhlug-discuss@mail.gnhlug.org http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss/