This class implements an anonymous pipe.
Pipes are a common method of inter-process communication - on Unix, pipes are the oldest form of IPC.
A pipe is a half-duplex communication channel, which means that data only flows in one direction. Pipes have a read-end and a write-end. One process writes to the pipe and another process reads the data written by its peer. Read and write operations are always synchronous. A read will block until data is available and a write will block until the reader reads the data.
Pipe objects have value semantics; the actual work is delegated to a reference-counted PipeImpl object.
The read/write handle or file descriptor.
used by close()
CLOSE_READ = 0x01
Close reading end of pipe.
CLOSE_WRITE = 0x02
Close writing end of pipe.
CLOSE_BOTH = 0x03
Close both ends of pipe.
Creates the Pipe using the PipeImpl from another one.
Closes and destroys the Pipe.
CloseMode mode = CLOSE_BOTH
Depending on the argument, closes either the reading end, the writing end, or both ends of the Pipe.
Releases the Pipe's PipeImpl and assigns another one.
void * buffer,
Receives data from the pipe and stores it in buffer. Up to length bytes are received. Blocks until data becomes available.
Returns the number of bytes received, or 0 if the pipe has been closed.
Throws a ReadFileException if nothing can be read.
Handle readHandle() const;
Returns the read handle or file descriptor for the Pipe. For internal use only.
const void * buffer,
Sends the contents of the given buffer through the pipe. Blocks until the receiver is ready to read the data.
Returns the number of bytes sent.
Throws a WriteFileException if the data cannot be written.
Handle writeHandle() const;
Returns the write handle or file descriptor for the Pipe. For internal use only.