writev()
Write bytes to a file
Synopsis:
#include <sys/uio.h>
ssize_t writev( int filedes,
const iov_t* iov,
int nparts );
Arguments:
- filedes
- The file descriptor for the file you want to write in.
- iov
- An array of iov_t objects that contain the data that you want to write. The combined size (i.e., the sum of the length values) of the objects must not exceed SSIZE_MAX - sizeof(io_write_t) (see <limits.h>), or the function fails and sets errno. If the size is greater than SSIZE_MAX - sizeof(io_write_t) but less than or equal to SSIZE_MAX, errno is set to EOVERFLOW. If the size is greater than SSIZE_MAX, errno is set to EINVAL.
- nparts
- The number of entries in the iov array. The maximum number of entries is UIO_MAXIOV.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The writev() function performs the same action as write(), but gathers the output data from the nparts buffers specified by the members of the iov array: iov[0], iov[1], … iov[nparts-1].
For writev(), the iov_t structure contains the following members:
- iov_base, iov_base_const
- Base address of a memory area from which data should be written.
- iov_len
- The length of the memory area.
The writev() function always writes a complete area before proceeding to the next.
If writev() is interrupted by a signal before it has written any data, it returns -1 and sets errno to EINTR. However, if writev() is interrupted by a signal after it has successfully written some data, it will return the number of bytes written.
For more details, see the write() function.
Returns:
The number of bytes written, or -1 if an error occurs (errno is set).
Errors:
- EAGAIN
- The O_NONBLOCK flag is set for the file descriptor and the write operation would block.
- EBADF
- The file descriptor, filedes, isn't a valid file descriptor open for writing.
- EFBIG
- The file is a regular file, the combined size of the iov_t objects is greater than 0, and the starting position is greater than or equal to the offset maximum associated with the file.
- EINTR
- The write operation was interrupted by a signal, and either no data was transferred, or the resource manager responsible for that file doesn't report partial transfers.
- EINVAL
- The nparts argument is less than or equal to 0, or greater than UIO_MAXIOV. Or, an attempt was made to write a number bytes that exceeds the allowable limit.
- EIO
- A physical I/O error occurred (for example, a bad block on a disk). The precise meaning is device-dependent.
- ENOSPC
- There is no free space remaining on the device containing the file.
- ENOSYS
- The write() function isn't implemented for the filesystem specified by filedes.
- EOVERFLOW
- An attempt was made to write a number of bytes that when added to the size of the write message structure exceeds the allowable limit.
- EPIPE
- An attempt was made to write to a pipe (or FIFO) that isn't open for reading by any process. A SIGPIPE signal is also sent to the process.
Classification:
Safety: | |
---|---|
Cancellation point | Yes |
Signal handler | Yes |
Thread | Yes |