# writev

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           writev — write a vector
    


## SYNOPSIS



           #include <sys/uio.h>
    
           ssize_t writev(int _fildes_ , const struct iovec *_iov_ , int _iovcnt_);
    


## DESCRIPTION



           The _writev_() function shall be equivalent to _write_(), except as
           described below. The _writev_() function shall gather 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}, as 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
           shall always write a complete area before proceeding to the next.
    
           If _fildes_ refers to a regular file and all of the _iov_len_ members
           in the array pointed to by _iov_ are 0, _writev_() shall return 0 and
           have 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 shall fail and no data shall be transferred.
    


## RETURN VALUE



           Upon successful completion, _writev_() shall return the number of
           bytes actually written. Otherwise, it shall return a value of -1,
           the file-pointer shall remain unchanged, and _errno_ shall be set to
           indicate an error.
    


## ERRORS



           Refer to write(3p).
    
           In addition, the _writev_() function shall fail if:
    
           **EINVAL** The sum of the _iov_len_ values in the _iov_ array would
                  overflow an **ssize_t**.
    
           The _writev_() function may fail and set _errno_ to:
    
           **EINVAL** The _iovcnt_ argument was less than or equal to 0, or greater
                  than {IOV_MAX}.
    
           _The following sections are informative._
    


## EXAMPLES



       **Writing Data from an Array**
           The following example writes data from the buffers specified by
           members of the _iov_ array to the file associated with the file
           descriptor _fd_.
    
               #include <sys/types.h>
               #include <sys/uio.h>
               #include <unistd.h>
               ...
               ssize_t bytes_written;
               int fd;
               char *buf0 = "short string\n";
               char *buf1 = "This is a longer string\n";
               char *buf2 = "This is the longest string in this example\n";
               int iovcnt;
               struct iovec iov[3];
    
               iov[0].iov_base = buf0;
               iov[0].iov_len = strlen(buf0);
               iov[1].iov_base = buf1;
               iov[1].iov_len = strlen(buf1);
               iov[2].iov_base = buf2;
               iov[2].iov_len = strlen(buf2);
               ...
               iovcnt = sizeof(iov) / sizeof(struct iovec);
    
               bytes_written = writev(fd, iov, iovcnt);
               ...
    


## APPLICATION USAGE



           None.
    


## RATIONALE



           Refer to write(3p).
    


## FUTURE DIRECTIONS



           None.
    


* * *