I'm writing a bash script that communicates with a daemon process using
a fifo. I am trying to bulletproof the script to safeguard myself if the
daemon process crashes before it starts writing to the fifo. UNIX
hackers will know that opening a fifo for reading will block until the
writing side has opened the fifo for writing (and vice versa). I open
the fifo for reading like this in bash:
exec 4< $my_fifo
However, doing this is dangerous because the "exec" call will block
until the daemon process opens the fifo for writing. This is usually
fine, but if the daemon process *crashes* before it opens the fifo for
writing, my script will hang indefinitely.
So my question is this: Is there a way to check if a fifo is already
open for writing so I can safely open it for reading. Even better: Can I
do some "exec" magic with a timeout, such that if the open blocks for
more than a few seconds, I can bail out somehow?
Here is one caveat: I need to open the fifo exactly *once* and read many
times, so I can't just do multiple "read" commands on it (which opens
and closes the fifo each time). I'd be happy to be proven wrong on this
point. :)
TIA
--Dave
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/