1.\" Copyright (c) 1980, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)write.2 8.5 (Berkeley) 4/2/94 33.\" $FreeBSD$ 34.\" 35.Dd April 2, 1994 36.Dt WRITE 2 37.Os 38.Sh NAME 39.Nm write , 40.Nm writev , 41.Nm pwrite 42.Nd write output 43.Sh LIBRARY 44.Lb libc 45.Sh SYNOPSIS 46.Fd #include <sys/types.h> 47.Fd #include <sys/uio.h> 48.Fd #include <unistd.h> 49.Ft ssize_t 50.Fn write "int d" "const void *buf" "size_t nbytes" 51.Ft ssize_t 52.Fn writev "int d" "const struct iovec *iov" "int iovcnt" 53.Ft ssize_t 54.Fn pwrite "int d" "const void *buf" "size_t nbytes" "off_t offset" 55.Sh DESCRIPTION 56.Fn Write 57attempts to write 58.Fa nbytes 59of data to the object referenced by the descriptor 60.Fa d 61from the buffer pointed to by 62.Fa buf . 63.Fn Writev 64performs the same action, but gathers the output data 65from the 66.Fa iovcnt 67buffers specified by the members of the 68.Fa iov 69array: iov[0], iov[1], ..., iov[iovcnt\|-\|1]. 70.Fn Pwrite 71performs the same function, but writes to the specified position in 72the file without modifying the file pointer. 73.Pp 74For 75.Fn writev , 76the 77.Fa iovec 78structure is defined as: 79.Pp 80.Bd -literal -offset indent -compact 81struct iovec { 82 char *iov_base; /* Base address. */ 83 size_t iov_len; /* Length. */ 84}; 85.Ed 86.Pp 87Each 88.Fa iovec 89entry specifies the base address and length of an area 90in memory from which data should be written. 91.Fn Writev 92will always write a complete area before proceeding 93to the next. 94.Pp 95On objects capable of seeking, the 96.Fn write 97starts at a position 98given by the pointer associated with 99.Fa d , 100see 101.Xr lseek 2 . 102Upon return from 103.Fn write , 104the pointer is incremented by the number of bytes which were written. 105.Pp 106Objects that are not capable of seeking always write from the current 107position. The value of the pointer associated with such an object 108is undefined. 109.Pp 110If the real user is not the super-user, then 111.Fn write 112clears the set-user-id bit on a file. 113This prevents penetration of system security 114by a user who 115.Dq captures 116a writable set-user-id file 117owned by the super-user. 118.Pp 119When using non-blocking I/O on objects such as sockets that are subject 120to flow control, 121.Fn write 122and 123.Fn writev 124may write fewer bytes than requested; 125the return value must be noted, 126and the remainder of the operation should be retried when possible. 127.Sh IMPLEMENTATION NOTES 128In the non-threaded library 129.Fn write 130is implemented as the 131.Va write 132syscall. 133.Pp 134In the threaded library, the 135.Va write 136syscall is assembled to 137.Fn _thread_sys_write 138and 139.Fn write 140is implemented as a function which locks 141.Fa d 142for read and write, then calls 143.Fn _thread_sys_write . 144If the call to 145.Fn _thread_sys_write 146would block, a context switch is performed. 147Before returning, 148.Fn write 149unlocks 150.Fa d . 151.Pp 152In the non-threaded library 153.Fn writev 154is implemented as the 155.Va writev 156syscall. 157.Pp 158In the threaded library, the 159.Va writev 160syscall is assembled to 161.Fn _thread_sys_writev 162and 163.Fn writev 164is implemented as a function which locks 165.Fa d 166for read and write, then calls 167.Fn _thread_sys_writev . 168If the call to 169.Fn _thread_sys_writev 170would block, a context switch is performed. 171Before returning, 172.Fn writev 173unlocks 174.Fa d . 175.Sh RETURN VALUES 176Upon successful completion the number of bytes which were written 177is returned. Otherwise a -1 is returned and the global variable 178.Va errno 179is set to indicate the error. 180.Sh ERRORS 181.Fn Write , 182.Fn writev , 183and 184.Fn pwrite 185will fail and the file pointer will remain unchanged if: 186.Bl -tag -width Er 187.It Bq Er EBADF 188.Fa D 189is not a valid descriptor open for writing. 190.It Bq Er EPIPE 191An attempt is made to write to a pipe that is not open 192for reading by any process. 193.It Bq Er EPIPE 194An attempt is made to write to a socket of type 195.Dv SOCK_STREAM 196that is not connected to a peer socket. 197.It Bq Er EFBIG 198An attempt was made to write a file that exceeds the process's 199file size limit or the maximum file size. 200.It Bq Er EFAULT 201Part of 202.Fa iov 203or data to be written to the file 204points outside the process's allocated address space. 205.It Bq Er EINVAL 206The pointer associated with 207.Fa d 208was negative. 209.It Bq Er ENOSPC 210There is no free space remaining on the file system 211containing the file. 212.It Bq Er EDQUOT 213The user's quota of disk blocks on the file system 214containing the file has been exhausted. 215.It Bq Er EIO 216An I/O error occurred while reading from or writing to the file system. 217.It Bq Er EINTR 218A signal interrupted the write before it could be completed. 219.It Bq Er EAGAIN 220The file was marked for non-blocking I/O, 221and no data could be written immediately. 222.El 223.Pp 224In addition, 225.Fn writev 226may return one of the following errors: 227.Bl -tag -width Er 228.It Bq Er EDESTADDRREQ 229The destination is no longer available when writing to a 230.Ux 231domain datagram socket on which 232.Xr connect 2 233had been used to set a destination address. 234.It Bq Er EINVAL 235.Fa Iovcnt 236was less than or equal to 0, or greater than 237.Dv UIO_MAXIOV . 238.It Bq Er EINVAL 239One of the 240.Fa iov_len 241values in the 242.Fa iov 243array was negative. 244.It Bq Er EINVAL 245The sum of the 246.Fa iov_len 247values in the 248.Fa iov 249array overflowed a 32-bit integer. 250.It Bq Er ENOBUFS 251The mbuf pool has been completely exhausted when writing to a socket. 252.El 253.Pp 254The 255.Fn pwrite 256call may also return the following errors: 257.Bl -tag -width Er 258.It Bq Er EINVAL 259The specified file offset is invalid. 260.It Bq Er ESPIPE 261The file descriptor is associated with a pipe, socket, or FIFO. 262.El 263.Sh SEE ALSO 264.Xr fcntl 2 , 265.Xr lseek 2 , 266.Xr open 2 , 267.Xr pipe 2 , 268.Xr select 2 269.Sh STANDARDS 270The 271.Fn write 272function call is expected to conform to 273.St -p1003.1-90 . 274The 275.Fn writev 276and 277.Fn pwrite 278functions are expected to conform to 279.St -xpg4.2 . 280.Sh HISTORY 281The 282.Fn pwrite 283function call 284appeared in 285.At V.4 . 286The 287.Fn writev 288function call 289appeared in 290.Bx 4.2 . 291A 292.Fn write 293function call appeared in 294.At v6 . 295