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:

cat
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!

Comments

  • 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
    

  • 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...

    Regards
  • 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.

Categories

Upcoming Training