Asynchronous pipe I/O
rihad at mail.ru
Wed Nov 5 11:10:40 PST 2008
Nate Eldredge wrote:
> On Wed, 5 Nov 2008, rihad wrote:
>> Imagine this shell pipeline:
>> sh prog1 | sh prog2
>> As given above, prog1 blocks if prog2 hasn't yet read previously written
>> data (actually, newline separated commands) or is busy. What I want is
>> for prog1 to never block:
>> sh prog1 | buffer | sh prog2
> [and misc/buffer is unsuitable]
> I found an old piece of code laying around that I wrote for this
> purpose. Looking at it, I can see a number of inefficiencies, but it
> might do in a pinch. You're welcome to use it; I hereby release it to
> the public domain.
> Another hack that you could use, if you don't mind storing the buffer on
> disk rather than memory, is
> sh prog1 > tmpfile &
> tail -f -c +0 tmpfile | sh prog2
Thanks, but I was looking for how to get some port do that useful
functionality for me. Strange as it is, there doesn't seem to be such a
tool handy, despite the "small tool doing one thing good" philosophy of
Unix! It's invaluable for optimizing certain tasks and isn't coupled to
anything: as generic as could be. Perhaps I should also email buffer's
author <jonny at jonny.eng.br> for his opinion, and ask him why -p 0
(default) doesn't do the Right Thing.
> Here's my program.
Thanks again, I'm sure I'll use your code if I can't get the port
version to work.
More information about the freebsd-hackers