Open System Services System Calls Reference Manual (G06.28+)

spt_writex(2) OSS System Calls Reference Manual
If the O_SYNC ag of the le status is set and ledes refers to a regular le, a successful
spt_writex() call does not return until the data is delivered to the underlying hardware (as
described in the open(2) reference page).
The O_NONBLOCK ag is effective only on pipes, FIFOs, sockets, and terminal device les
(Telserv and OSSTTY processes).
Write requests to a pipe or a FIFO le are handled the same as writes to a regular le with these
exceptions:
No le offset is associated with a pipe; therfore, each spt_writex()
request appends to the end of the pipe.
If the size of the spt_writex() request is less than or equal to the value
of the PIPE_BUF system variable, the spt_writex() function is
guaranteed to be atomic. The data is not interleaved with data from
other processes doing writes on the same pipe.
If the size of the spt_writex() request is greater than the value of the
PIPE_BUF system variable, the le system attempts to resize the pipe
buffer from 2 * PIPE_BUF to 65,536 bytes. If the resizing is successful,
the le system performs atomic writes of up to 32,768 bytes and can
transfer up to 52 kilobytes of data from the pipe buffer on subsequent
spt_readx() or spt_readvx() calls by the client.
If the le system cannot resize the buffer, it continues to use the existing
buffer. A second attempt at resizing occurs after approximately a minute
elapses.
Writes of greater than PIPE_BUF bytes can have data interleaved, on
arbitrary boundaries, with writes by other processes, whether or not the
O_NONBLOCK ag is set.
If the O_NONBLOCK ag is not set, a spt_writex() request to a full
pipe causes the process to block until enough space becomes available
to handle the entire request.
If the O_NONBLOCK ag is set, write( ) requests are handled
differently in these ways:
The spt_writex() function does block the process.
spt_writex() requests for PIPE_BUF or fewer bytes either
succeed completely and return the value of the nbytes parameter,
or return the value -1 and set errno to [EAGAIN].
A spt_writex() request for greater than PIPE_BUF bytes either
transfers what it can and returns the number of bytes written, or
transfers no data and returns the value -1 with errno set to
[EAGAIN]. Also, if a request is greater than PIPE_BUF bytes
and all data previously written to the pipe has been read,
spt_writex() transfers at least PIPE_BUF bytes.
When attempting to write to a le descriptor (other than a pipe or a FIFO le) for
a special character device (a terminal) that supports nonblocking writes and can-
not accept data immediately:
If the O_NONBLOCK ag is clear, the spt_writex() function blocks
until the data can be accepted.
7364 Hewlett-Packard Company 527186-005