Linux.com

fifo doesn't work

Link to this post 20 Mar 12

When I try to pass some data trough an fifo, I can't get what I expect. First I creat an fifo named "fifo1" by using "mkfifo", and then I type the following commands:
cat <fifo1&
echo "some data" >fifo1

It works sometimes since I can see the output("some data") from cat, but sometimes I cannot see any output. I'm now using Ubuntu 11.10 with Linux version 3.0.0-16-generic.

What could be the cause? My guess is the buffering. Any solution to this? Thanks!

Link to this post 20 Mar 12

You can check if the program supports unbuffering (grep, sed, awk for example do).

You can try something ala:

tail -f logfile | unbuffer grep 'foo bar' | awk ...

(the expect package contaings the unbuffer program)

Tee might be useful as well

 man tee

man unbuffer

Link to this post 21 Mar 12

Thanks Marc. It turned out that the problem is not the bufferring, but something wrong inside the fifo file.
I tried the pair of command

cat <fifo1 &
echo "111" >fifo1

for several times, and it stopped to work at about the 4th time I tried. Even "unbuffer" could not change anything.
Furthermore, writing to the fifo (without any reader) wouldn't block the command(echo >fifo1). Sometime later, it suddenly began to work, but writing without any reader still didn't block the command.

Later I removed this fifo and created a new one, and now everything works fine. BTW, I put this fifo inside a Ubuntu One folder, so it's automatically synchronized to the server, and I'm not sure whether it's the cause.

Thanks again. :)

Link to this post 22 Mar 12

The problem most probably comes from the Ubuntu One syncronization...

Regards

Link to this post 24 Mar 12

All Linux I/O is buffered. It is NOT guaranteed to be delivered in any particular schedule. Try using the sync command between writing and reading the stream.

Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board