Justin Walker on Thu, 08 Jan 2004 21:18:47 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Using fifos for in/output


To add to the discussion:

On Thursday, January 8, 2004, at 06:15 AM, Prof. J. E. Cremona wrote:

[snip]
As a first test, I tried this but it doesn't work:

1. Create fifos called gpin and gpout.
2. (In window 1) start gp with
   gp -q -f < gpin > gpout
3. (In window 2) In a separate window do
   tail -f gpout
4. (In window 3) In a 3rd window do
   cat >> gpin

And then I would hope that any gp input lines I type into window 3
will be processed by gp and the output seen in window 2.

On Mac OS X, I see exactly what you would expect, if I use 'cat'. If I use 'tail -f', then it sometimes works. The failures seem to be random, but with success intermittent and infrequent.

I think that the problem is due to the behavior of 'tail', combined with (possible) quirks in the implementation [or, perhaps, design] of fifos. 'tail -f' sleeps, and checks the modification time of the file it's reading, at intervals.

FWIW:
  - 'cat' will continue to read the fifo until you terminate
    the 'gp' session, so that gives you the experience you want.
  - if 'tail -f' is in "recalcitrant mode", when it finally
    wakes up, it literally gives you the tail of the output
    (if there's a lot of queued-up stuff, only the last part
    gets displayed), so even if it worked, if you are producing
    lots of output in a short time, 'tail' will not show you
    everything.

At this point, I have no good explanation. What system are you using? If you have the time, it would be interesting to see what happens when you try the various orders of startup.

Regards,

Justin

--
/~\ The ASCII           Justin C. Walker, Curmudgeon-at-Large
\ / Ribbon Campaign
 X  Help cure HTML Email
/ \