Open System Services System Calls Reference Manual (G06.29+, H06.08+, J06.03+)
System Functions (w) write(2)
bytes more in a file before reaching a limit. A write request of 512 bytes returns a value of 20.
The limit reached 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 write() function returns the number of bytes actually written to
the file associated with filedes. This number is never greater than the value of nbytes.
If the O_APPEND flag of the file status is set, the file offset is set to the end of the file prior to
each write.
Write requests to a pipe or a FIFO file are handled the same as writes to a regular file with these
exceptions:
• No file offset is associated with a pipe; therfore, each write() request appends to the end
of the pipe.
• If the size of the write() request is less than or equal to the value of the PIPE_BUF sys-
tem variable, the write( ) 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 write() request is greater than the value of the PIPE_BUF system vari-
able, 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 subsequent
read() or readv() 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 elapses.
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, a write() 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, write() requests are handled differently in these ways:
— The write( ) function does block the process.
— write( ) 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].
—Awrite() 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, write() transfers
at least PIPE_BUF bytes.
When attempting to write to a file descriptor for a special character device (a terminal) that can-
not accept data immediately:
•
If the O_NONBLOCK fl
ag is clear, the write( ) function blocks until the data can be
accepted or an error occurs.
• If the O_NONBLOCK flag is set, the write( ) function returns the value -1 and errno is
set to [EAGAIN].
527186-023 Hewlett-Packard Company 10−15