Posix library ,Concurrent Haskell and Haskell IO sub-system
Rafael Martinez Torres
rmartine@fdi.ucm.es
Fri, 11 Jul 2003 08:39:54 +0200 (CEST)
On Fri, 11 Jul 2003, Volker Stolz wrote:
> >
> > createPipe :: IO (Fd,Fd) (Unkown alternatives)
>
> I suppose you have to pass this descriptor to another process
> through fork()?
>
Rigth.
(piper,pipew) <- createPipe
mpid <- forkProcess
case mpid of
Nothing -> do --child
nobytes <- fdWrite pipew stringToSend
Just pid -> do --parent
(string,nobytes) <- fdRead piper stringReceived maxBytes
>
> There's System.Posix.IO.fdToHandle :: Fd -> IO Handle
>
> > What about ?
> > threadReadWait :: Int -> IO()
> > Should I convert a Handle into a Int ?
>
I suppose there is System.Posix.IO.handleToFd :: Handle -> IO (Fd)
and then
...
(piper,pipew) <- createPipe
piperHandle <- fdToHandle(piper)
threadWaitRead ( fdToInt(handleToFd(piperHandle)) )
message <- hGetLine piperHandle --or whatever.
...
> Yes, that should work, too, but you won't know how many bytes are available.
> You could use or adapt one of the *MayBlock-ellipses from Foreign.C.Error
> together with threadWaitRead, but that's making things even more ugly.
>
> Volker
OK. Don't worry.
Thank you very much. Very usefull.