Write bytes to a file
#include <sys/uio.h> ssize_t writev( int fildes, const iov_t* iov, int iovcnt );
- The file descriptor for the file you want to write in.
- An array of iov_t objects that contain the data that you want to write.
- The number of elements in the array.
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The writev() function performs the same action as write() , but gathers the output data from the iovcnt buffers specified by the members of the iov array: iov, iov, …, iov[iovcnt-1].
For writev(), the iov_t structure contains the following members:
- Base address of a memory area from which data should be written.
- The length of the memory area.
The writev() function always writes a complete area before proceeding to the next.
The maximum number of entries in the iov array is UIO_MAXIOV.
If writev() is interrupted by a signal before it has written any data, it returns a value of -1, and errno is set 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.
The number of bytes written, or -1 if an error occurs (errno is set).
- The O_NONBLOCK flag is set for the file descriptor, and the process would be delayed in the write operation.
- The file descriptor, fildes, isn't a valid file descriptor open for writing.
- The file is a regular file, where nbytes is greater than 0, and the starting position is greater than or equal to the offset maximum associated with the file.
- 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.
- The iovcnt argument is less than or equal to 0, or greater than UIO_MAXIOV.
- A physical I/O error occurred (for example, a bad block on a disk). The precise meaning is device-dependent.
- There is no free space remaining on the device containing the file.
- The write() function isn't implemented for the filesystem specified by filedes.
- 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.