Welcome to the Linux Foundation Forum!

fifo doesn't work


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:

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!


  • marc
    marc Posts: 647
    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

  • yourtommy
    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. :)
  • marc
    marc Posts: 647
    The problem most probably comes from the Ubuntu One syncronization...

  • woboyle
    woboyle Posts: 501
    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.


Upcoming Training