[Haskell-cafe] I/O system brokenness with named pipes
Duncan Coutts
duncan.coutts at worc.ox.ac.uk
Fri Apr 11 06:39:54 EDT 2008
On Thu, 2008-04-10 at 20:34 -0500, John Goerzen wrote:
> I have created the named pipe from Haskell no problem.
>
> But I can't use writeFile to write data to it. Worse, it returns:
>
> *** Exception: /tmp/bakroller.zD0xHj/fifo: openFile: does not exist
> (No such device or address)
> What's going on here? Am I going to have to resort to the
> System.Posix interface just to be able to write to a named pipe?
Named pipes have broken semantics for non-blocking IO, see google or the
man pages on named pipes. GHC's standard Handle IO always sets file
descriptor to non-blocking mode. That's the problem. That's why cat
works, because it uses blocking IO.
You would indeed need to use System.Posix to get a FD in blocking mode.
Then you have to worry a bit about blocking other Haskell thread when
you block on writing to the pipe.
Duncan
More information about the Haskell-Cafe
mailing list