HP-UX Reference (11i v1 05/09) - 2 System Calls (vol 5)

w
write(2) write(2)
NAME
write, writev, pwrite - write on a file
SYNOPSIS
#include <unistd.h>
ssize_t write(int fildes, const void *buf, size_t nbyte);
ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
#include <sys/uio.h>
ssize_t writev(int fildes, const struct iovec *iov, int iovcnt);
DESCRIPTION
The write() function attempts to write nbyte bytes from the buffer pointed to by buf to the file associated
with the open file descriptor, fildes.
If nbyte is 0,
write() will return 0 and have no other results if the file is a regular file; otherwise, the
results are unspecified.
On a regular file or other file capable of seeking, the actual writing of data proceeds from the position in the
file indicated by the file offset associated with fildes. Before successful return from
write(), the file
offset is incremented by the number of bytes actually written. On a regular file, if this incremented file
offset is greater than the length of the file, the length of the file will be set to this file offset. If the
O_SYNC
flag of the file status flags is set and fildes refers to a regular file, a successful
write() does not return
until the data is delivered to the underlying hardware. On a file not capable of seeking, writing always
takes place starting at the current position. The value of a file offset associated with such a device is
undefined.
If the
O_APPEND flag of the file status flags is set, the file offset will be set to the end of the file prior to
each write and no intervening file modification operation will occur between changing the file offset and the
write operation.
If a write() requests that more bytes be written than there is room for (for example, the ulimit or the
physical end of a medium), only as many bytes as there is room for will be written. For example, suppose
there is space for 20 bytes more in a file before reaching a limit. A write of 512 bytes will return 20. The
next write of a non-zero number of bytes will give a failure return (except as noted below) and the imple-
mentation will generate a
SIGXFSZ signal for the process.
If write() is interrupted by a signal before it writes any data, it will return 1 with
errno set to
[EINTR].
If
write() is interrupted by a signal after it successfully writes some data, it will return the number of
bytes written.
If the value of nbyte is greater than {SSIZE_MAX} , the result is implementation-dependent.
After a write() to a regular file has successfully returned:
Any successful read() from each byte position in the file that was modified by that write will
return the data specified by the write() for that position until such byte positions are again
modified.
Any subsequent successful write() to the same byte position in the file will overwrite that file
data.
Write requests to a pipe or FIFO will be handled the same as a regular file with the following exceptions:
There is no file offset associated with a pipe, hence each write request will append to the end of the
pipe.
Write requests of {PIPE_BUF} bytes or less will not be interleaved with data from other
processes doing writes on the same pipe. Writes of greater than {PIPE_BUF} bytes may have
data interleaved, on arbitrary boundaries, with writes by other processes, whether or not the
O_NONBLOCK flag of the file status flags is set.
If the O_NONBLOCK flag is clear, a write request may cause the process to block, but on normal
completion it will return nbyte.
If the O_NONBLOCK flag is set, write() requests will be handled differently, in the following
ways:
Section 2480 Hewlett-Packard Company 1 HP-UX 11i Version 1: September 2005