NAME | SYNOPSIS | FEATURES | DESCRIPTION | PARAMETERS | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO
#include <sys/types.h> #include <sys/uio.h> #include <unistd.h>ssize_t write(int d, const void * buf, size_t nbytes);
MSDOSFS, NFS_CLIENT, UFS, POSIX_SOCKETS
write() attempts to write nbytes of data to the object referenced by the descriptor d from the buffer pointed to by buf . writev() performs the same action, but gathers the output data from the iovcnt buffers specified by the members of the iov array: iov[0] , iov[1] , ..., iov[iovcnt-1] .
On objects capable of seeking, the write() starts at a position given by the pointer associated with d . See lseek(2POSIX) . Upon return from write() , the pointer is incremented by the number of bytes which were written.
Objects that are not capable of seeking always write from the current position. The value of the pointer associated with this type of object is undefined.
If the real user is not the superuser, then write() clears the set-user- ID bit on a file. This prevents penetration of system security by a user who "captures" a writable set-user- ID file owned by the super-user.
When using non-blocking I/O on objects such as sockets that are subject to flow control, write() and writev() may write fewer bytes than requested. The return value must be noted, and the remainder of the operation should be retried when possible.
write() takes the following parameters:
Descriptor of object to which to write.
Buffer from which to write data.
Number of bytes of data to write.
writev() takes the following parameters:
Descriptor of object to which to write.
Array of buffers from which to write data.
Number of buffers of data to write.
For
writev()
, the
iovec
structure is defined as:
struct iovec { char *iov_base; /* base address */ size_t iov_len; /* length */ };
Each
iovec
entry specifies the base address and length of an area in memory from which data should be written.
writev()
always writes a complete area before proceeding to the next.
Upon successful completion, write() and writev() return the number of bytes actually written. Otherwise, they return -1 and set errno to indicate the error.
write() and writev() fail and the file pointer remains unchanged if:
The file was marked for non-blocking I/O , and no data could be written immediately.
d is not a valid descriptor of an object open for writing.
In user mode, part of buf or iov to be written to the file points outside the allocated address space for the process. In supervisor mode, this is not detected, and the state of the target is unknown.
An attempt was made to write a file that exceeds the maximum file size or the file size limit for the process.
The pointer associated with d was negative.
An I/O error occurred while reading from or writing to the file system.
No free space remained on the file system containing the file.
An attempt was made to write to a pipe that is not open for reading by any process.
An attempt was made to write to a socket of type SOCK_STREAM that is not connected to a peer socket.
In addition, writev() may return one of the following errors:
iovcnt was less than or equal to 0 , or greater than UIO_MAXIOV .
One of the iov_len values in the iov array was negative.
The sum of the iov_len values in the iov array overflowed a 32-bit integer.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | FEATURES | DESCRIPTION | PARAMETERS | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO