System.Process.CommunicationHandle.Internal

process-1.6.26.1: Process libraries

Safe Haskell | Safe-Inferred
Language | Haskell2010

System.Process.CommunicationHandle.Internal

Contents

- `CommunicationHandle`: a `Handle` that can be serialised,
  - Internal functions

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 the `Show` instance), and passed to the child process. It is recommended to close the parent's reference to the `CommunicationHandle` using `closeCommunicationHandle` after it has been inherited by the child process.
- The child process can deserialise the `CommunicationHandle` (using the `Read` instance), and then use `openCommunicationHandleWrite` or `openCommunicationHandleRead` in order to retrieve a `Handle` 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

Constructors

CommunicationHandle Fd |

#### Instances

Instances details

Eq CommunicationHandle Source # |
Instance details Defined in System.Process.CommunicationHandle.Internal Methods (==) :: CommunicationHandle -> CommunicationHandle -> Bool # (/=) :: CommunicationHandle -> CommunicationHandle -> Bool #
Ord CommunicationHandle Source # |
Instance details Defined in System.Process.CommunicationHandle.Internal Methods compare :: CommunicationHandle -> CommunicationHandle -> Ordering # (<) :: CommunicationHandle -> CommunicationHandle -> Bool # (<=) :: CommunicationHandle -> CommunicationHandle -> Bool # (>) :: CommunicationHandle -> CommunicationHandle -> Bool # (>=) :: CommunicationHandle -> CommunicationHandle -> Bool # max :: CommunicationHandle -> CommunicationHandle -> CommunicationHandle # min :: CommunicationHandle -> CommunicationHandle -> CommunicationHandle #
Read CommunicationHandle Source # |
Instance details Defined in System.Process.CommunicationHandle.Internal Methods readsPrec :: Int -> ReadS CommunicationHandle # readList :: ReadS [CommunicationHandle] # readPrec :: ReadPrec CommunicationHandle # readListPrec :: ReadPrec [CommunicationHandle] #
Show CommunicationHandle Source # |
Instance details Defined in System.Process.CommunicationHandle.Internal Methods showsPrec :: Int -> CommunicationHandle -> ShowS # show :: CommunicationHandle -> String # showList :: [CommunicationHandle] -> ShowS #

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 #

Arguments

:: (forall a. (a, a) -> (a, a)) | `id` (we read, they write) or `swap` (they read, we write)
-> 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) |

Internal helper function used to define `createWeReadTheyWritePipe` and `createTheyReadWeWritePipe` while reducing code duplication.

The returned `Handle` does not have any finalizers attached to it; use `hClose` to close it.