Poco

class Pipe

Library: Foundation
Package: Processes
Header: Poco/Pipe.h

Description

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.

The sendBytes() and readBytes() methods of Pipe are usually used through a PipeOutputStream or PipeInputStream and are not called directly.

Pipe objects have value semantics; the actual work is delegated to a reference-counted PipeImpl object.

Member Summary

Member Functions: close, operator =, readBytes, readHandle, writeBytes, writeHandle

Types

Handle

typedef PipeImpl::Handle Handle;

The read/write handle or file descriptor.

Enumerations

CloseMode

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.

Constructors

Pipe

Pipe();

Creates the Pipe.

Throws a CreateFileException if the pipe cannot be created.

Pipe

Pipe(
    const Pipe & pipe
);

Creates the Pipe using the PipeImpl from another one.

Destructor

~Pipe

~Pipe();

Closes and destroys the Pipe.

Member Functions

close

void close(
    CloseMode mode = CLOSE_BOTH
);

Depending on the argument, closes either the reading end, the writing end, or both ends of the Pipe.

operator =

Pipe & operator = (
    const Pipe & pipe
);

Releases the Pipe's PipeImpl and assigns another one.

readBytes inline

int readBytes(
    void * buffer,
    int length
);

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.

readHandle inline

Handle readHandle() const;

Returns the read handle or file descriptor for the Pipe. For internal use only.

writeBytes inline

int writeBytes(
    const void * buffer,
    int length
);

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.

writeHandle inline

Handle writeHandle() const;

Returns the write handle or file descriptor for the Pipe. For internal use only.