On Friday 11 April 2008 05:39:54 am Duncan Coutts wrote: > 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.
OK, I have referred to fifo(7) regarding this point. It seems I may need a loop trying over and over to open the FIFO in write mode. It also appears that ReadWriteMode appearing to work is Linux-specific, and this behavior is left undefined in POSIX. Does openFd do a non-blocking open? (Brief testing suggests it does) I'm somewhat confused about its semantics, especially since it does not appear to correspond directly to open(2). O_CREAT, for instance, is missing. > 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. Fortunately, in this particular case, I'm using forking instead of threading so this won't be a problem. Thanks for the help. -- John _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe