Open System Services System Calls Reference Manual (G06.29+, H06.08+, J06.03+)
System Functions (s and S) spt_writevx(2)
The limit can be either the end of the physical medium or the value that has been set by the
ulimit() function. The next write of a nonzero number of bytes gives a failure return (except as
noted later).
Upon successful completion, the spt_writevx() function returns the number of bytes actually
written to the file associated with filedes.
If the O_APPEND status flag of the file is set, the file offset is set to the end of the file before
each write operation.
If the O_SYNC status flag of the file is set and filedes refers to a regular file, a successful
spt_writevx() call does not return until the data is delivered to the underlying hardware (as
described in the open(2) reference page).
The O_NONBLOCK flag is effective only on pipes, FIFOs, sockets, and terminal device files
(Telserv or OSSTTY processes).
Write requests to a pipe or FIFO file are handled the same way as write requests to a regular file
with these exceptions:
• No file offset is associated with a pipe; therfore, each spt_writevx() request appends to
the end of the pipe.
• If the size of the spt_writevx() request is less than or equal to the value of the
PIPE_BUF system variable, the spt_writevx() 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_writevx() request is greater than the value of the PIPE_BUF sys-
tem variable, the file system attempts to resize the pipe buffer from 2 * PIPE_BUF to
65,536 bytes. If the resizing is successful, the file system performs atomic writes of up to
32,768 bytes and can transfer up to 52 kilobytes of data from the pipe buffer on subse-
quent spt_readx() or spt_readvx() calls by the client.
If the file system cannot resize the buffer, it continues to use the existing buffer. A
second attempt at resizing occurs after approximately a minute.
Writes of greater than PIPE_BUF bytes can have data interleaved, on arbitrary boun-
daries, with writes by other processes, whether or not the O_NONBLOCK flag is set.
• If the O_NONBLOCK flag is not set, an spt_writevx() request to a full pipe causes the
process to block until enough space becomes available to handle the entire request.
• If the O_NONBLOCK flag is set, spt_writevx() requests are handled differently:
— The spt_writevx() function does block the process.
— spt_writevx() requests for PIPE_BUF or fewer bytes either succeed completely
and return the number of bytes written, or return the value -1 and set errno to
[EAGAIN].
—Anspt_writevx() 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,
writev() transfers at least PIPE_BUF bytes.
When you attempt to write to a file descriptor (other than a pipe or a FIFO file) for a special char-
acter device (a terminal) that supports nonblocking writes and cannot accept data immediately:
• If the O_NONBLOCK flag is clear, the spt_writevx() function blocks until the data can
be accepted.
527186-023 Hewlett-Packard Company 7−467