Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- newtype CommunicationHandle = CommunicationHandle Fd
- closeCommunicationHandle :: CommunicationHandle -> IO ()
- useCommunicationHandle :: Bool -> CommunicationHandle -> IO Handle
- createCommunicationPipe :: (forall a. (a, a) -> (a, a)) -> Bool -> IO (Handle, CommunicationHandle)
CommunicationHandle
: a Handle
that can be serialised,
newtype CommunicationHandle Source #
Gets a GHC Handle File description from the given OS Handle or POSIX fd.
A CommunicationHandle
is an abstraction over operating-system specific
internal representation of a Handle
, which can be communicated through a
command-line interface.
In a typical use case, the parent process creates a pipe, using e.g.
createWeReadTheyWritePipe
or createTheyReadWeWritePipe
.
- One end of the pipe is a
Handle
, which can be read from/written to by the parent process. - The other end is a
CommunicationHandle
, which can be inherited by a child process. A reference to the handle can be serialised (using theShow
instance), and passed to the child process. It is recommended to close the parent's reference to theCommunicationHandle
usingcloseCommunicationHandle
after it has been inherited by the child process. - The child process can deserialise the
CommunicationHandle
(using theRead
instance), and then useopenCommunicationHandleWrite
oropenCommunicationHandleRead
in order to retrieve aHandle
which it can write to/read from.
readCreateProcessWithExitCodeCommunicationHandle
provides a high-level API
to this functionality. See there for example code.
Since: process-1.6.20.0
Instances
closeCommunicationHandle :: CommunicationHandle -> IO () Source #
Close a CommunicationHandle
.
Use this to close the CommunicationHandle
in the parent process after
the CommunicationHandle
has been inherited by the child process.
Since: process-1.6.20.0
Internal functions
useCommunicationHandle :: Bool -> CommunicationHandle -> IO Handle Source #
Internal function used to define openCommunicationHandleRead
and
openCommunicationHandleWrite.
createCommunicationPipe Source #
:: (forall a. (a, a) -> (a, a)) |
|
-> Bool | whether to pass a handle supporting asynchronous I/O to the child process (this flag only has an effect on Windows and when using WinIO) |
-> IO (Handle, CommunicationHandle) |