Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
WRITE(2)		    BSD	System Calls Manual		      WRITE(2)

     write, writev, pwrite, pwritev -- write output

     Standard C	Library	(libc, -lc)

     #include <unistd.h>

     write(int d, const	void *buf, size_t nbytes);

     pwrite(int	d, const void *buf, size_t nbytes, off_t offset);

     #include <sys/uio.h>

     writev(int	d, const struct	iovec *iov, int	iovcnt);

     pwritev(int d, const struct iovec *iov, int iovcnt, off_t offset);

     write() attempts to write nbytes of data to the object referenced by the
     descriptor	d from the buffer pointed to by	buf.  writev() performs	the
     same action, but gathers the output data from the iovcnt buffers speci-
     fied by the members of the	iov array: iov[0], iov[1], ...,	iov[iovcnt-1].
     pwrite() and pwritev() perform the	same functions,	but write to the spec-
     ified position in the file	without	modifying the file pointer.

     For writev() and pwritev(), the iovec structure is	defined	as:

	   struct iovec	{
		   void	*iov_base;
		   size_t iov_len;

     Each iovec	entry specifies	the base address and length of an area in mem-
     ory from which data should	be written.  writev() and pwritev() will al-
     ways write	a complete area	before proceeding to the next.

     On	objects	capable	of seeking, the	write()	starts at a position given by
     the pointer associated with d (see	lseek(2)).  Upon return	from write(),
     the pointer is incremented	by the number of bytes which were written.

     Objects that are not capable of seeking always write from the current po-
     sition.  The value	of the pointer associated with such an object is unde-

     If	the real user is not the super-user, then write() clears the set-user-
     id	bit on a file.	This prevents penetration of system security by	a user
     who "captures" a writable set-user-id file	owned by the super-user.

     If	write()	succeeds it will update	the st_ctime and st_mtime fields of
     the file's	meta-data (see stat(2)).

     When using	non-blocking I/O on objects such as sockets that are subject
     to	flow control, write() and writev() may write fewer bytes than re-
     quested; the return value must be noted, and the remainder	of the opera-
     tion should be retried when possible.

     Upon successful completion	the number of bytes which were written is re-
     turned.  Otherwise	a -1 is	returned and the global	variable errno is set
     to	indicate the error.

     write(), writev(),	pwrite(), and pwritev()	will fail and the file pointer
     will remain unchanged if:

     [EAGAIN]		The file was marked for	non-blocking I/O, and no data
			could be written immediately.

     [EBADF]		d is not a valid descriptor open for writing.

     [EDQUOT]		The user's quota of disk blocks	on the file system
			containing the file has	been exhausted.

     [EFAULT]		Part of	iov or data to be written to the file points
			outside	the process's allocated	address	space.

     [EFBIG]		An attempt was made to write a file that exceeds the
			process's file size limit or the maximum file size.

     [EINTR]		A signal was received before any data could be written
			to a slow device.  See sigaction(2) for	more informa-
			tion on	the interaction	between	signals	and system

     [EINVAL]		The pointer associated with d was negative; or the to-
			tal length of the I/O is more than can be expressed by
			the ssize_t return value.

     [EIO]		An I/O error occurred while reading from or writing to
			the file system.

     [ENOSPC]		There is no free space remaining on the	file system
			containing the file.

     [EPIPE]		An attempt is made to write to a pipe that is not open
			for reading by any process; or an attempt is made to
			write to a socket of type SOCK_STREAM that is not con-
			nected to a peer socket.

     In	addition, writev() and pwritev() may return one	of the following er-

     [EINVAL]		iovcnt was less	than or	equal to 0, or greater than
			{IOV_MAX}; or one of the iov_len values	in the iov ar-
			ray was	negative; or the sum of	the iov_len values in
			the iov	array overflowed a 32-bit integer.

     The pwrite() and pwritev()	calls may also return the following errors:

     [EINVAL]		The specified file offset is invalid.

     [ESPIPE]		The file descriptor is associated with a pipe, socket,
			or FIFO.

     fcntl(2), lseek(2), open(2), pipe(2), poll(2), select(2), sigaction(2)

     The write() function is expected to conform to IEEE Std 1003.1-1988
     ("POSIX.1").  The writev()	and pwrite() functions conform to X/Open
     Portability Guide Issue 4,	Version	2 ("XPG4.2").

     The pwritev() function call appeared in NetBSD 1.4.  The pwrite() func-
     tion call appeared	in AT&T	System V Release 4 UNIX.  The writev() func-
     tion call appeared	in 4.2BSD.  The	write()	function call appeared in
     Version 2 AT&T UNIX.

     Error checks should explicitly test for -1.  Code such as

	     while ((nr	= write(fd, buf, sizeof(buf))) > 0)

     is	not maximally portable,	as some	platforms allow	for nbytes to range
     between SSIZE_MAX and SIZE_MAX - 2, in which case the return value	of an
     error-free	write()	may appear as a	negative number	distinct from -1.
     Proper loops should use

	     while ((nr	= write(fd, buf, sizeof(buf))) != -1 &&	nr != 0)

BSD				 April 3, 2010				   BSD


Want to link to this manual page? Use this URL:

home | help