Writes to a file. Format #include <uio.h> ssize_t writev (int file_desc, const struct iovec *iov, int iovcnt); ssize_t __writev64 (int file_desc, const struct __iovec64 *iov, int iovcnt); (Integrity servers, Alpha)
1 – Function Variants
The writev function has variants named _writev32 and __writev64 for use with 32-bit and 64-bit pointer sizes, respectively.
2 – Arguments
file_desc A file descriptor that refers to a file currently opened for writing or updating. iov Array of iovec structures from which the output data is gathered. iovcnt The number of buffers specified by the members of the iov array.
3 – Description
The writev function is equivalent to write but gathers the output data from the iovcnt buffers specified by the members of the iov array: iov[0], iov[1], ..., iov[iovcnt-1]. The iovcnt argument is valid if greater than 0 and less than or equal to {IOV_MAX}, defined in <limits.h>. Each iovec entry specifies the base address and length of an area in memory from which data should be written. The writev function writes a complete area before proceeding to the next. If filedes refers to a regular file and all of the iov_len members in the array pointed to by iov are 0, writev returns 0 and has no other effect. For other file types, the behavior is unspecified. If the sum of the iov_len values is greater than SSIZE_MAX, the operation fails and no data is transferred. Upon successful completion, writev returns the number of bytes actually written. Otherwise, it returns a value of -1, the file pointer remains unchanged, and errno is set to indicate an error.
4 – Return Values
x The number of bytes written. -1 Indicates an error. The file times do not change, and the function sets errno to one of the following values: o EBADF - The file_desc argument is not a valid file descriptor open for writing. o EINTR - The write operation was terminated due to the receipt of a signal, and no data was transferred. o EINVAL - The sum of the iov_len values in the iov array would overflow an ssize_t, or the iovcnt argument was less than or equal to 0, or greater than {IOV_MAX}. o EIO - A physical I/O error has occurred. o ENOSPC - There was no free space remaining on the device containing the file. o EPIPE - An attempt is made to write to a pipe or FIFO that is not open for reading by any process, or that only has one end open. A SIGPIPE signal will also be sent to the thread.