[Haskell-cafe] Re: process
Bryan O'Sullivan
bos at serpentine.com
Fri Feb 23 13:37:46 EST 2007
Bryan O'Sullivan wrote:
> Just because *your* end of each pipe is a line-buffered file handle has
> no bearing on the *other* process's management of its pair of endpoints.
> For example, on a Unix-like system, the other process's stdio will
> block-buffer stdin and stdout by default if it finds that they're not
> attached to tty-like file descriptors.
In case the implications of this aren't clear, let me expand a little.
You've got a line-buffered stdout. You write "1+1\n", which sends 4
bytes to the other process.
It's got a block-buffered stdin, so it's going to sit in its first read
until it receives 512 bytes (or whatever the buffer size is) from you.
And an oversized violin, you have a deadlock!
The converse bites you, too. You want to read a line from the other
process. It writes "1+1\n" to you, but its stdio buffers up the 4 bytes
because it hasn't reached the 512-byte watermark. It then tries to read
from you, but you're still blocked trying to read the first line (that
it hasn't actually sent) from it. Deadlock.
<b
More information about the Haskell-Cafe
mailing list