summaryrefslogtreecommitdiffstats
path: root/man2/readv.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/readv.2')
-rw-r--r--man2/readv.2427
1 files changed, 0 insertions, 427 deletions
diff --git a/man2/readv.2 b/man2/readv.2
deleted file mode 100644
index c1295cd..0000000
--- a/man2/readv.2
+++ /dev/null
@@ -1,427 +0,0 @@
-.\" Copyright (C) 2007, 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:34:44 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Merged readv.[23], 2002-10-17, aeb
-.\" 2007-04-30 mtk, A fairly major rewrite to fix errors and
-.\" add more details.
-.\" 2010-11-16, mtk, Added documentation of preadv() and pwritev()
-.\"
-.TH readv 2 2023-10-31 "Linux man-pages 6.7"
-.SH NAME
-readv, writev, preadv, pwritev, preadv2, pwritev2 \-
-read or write data into multiple buffers
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/uio.h>
-.P
-.BI "ssize_t readv(int " fd ", const struct iovec *" iov ", int " iovcnt );
-.BI "ssize_t writev(int " fd ", const struct iovec *" iov ", int " iovcnt );
-.P
-.BI "ssize_t preadv(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset );
-.BI "ssize_t pwritev(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset );
-.P
-.BI "ssize_t preadv2(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset ", int " flags );
-.BI "ssize_t pwritev2(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset ", int " flags );
-.fi
-.P
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.P
-.BR preadv (),
-.BR pwritev ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR readv ()
-system call reads
-.I iovcnt
-buffers from the file associated with the file descriptor
-.I fd
-into the buffers described by
-.I iov
-("scatter input").
-.P
-The
-.BR writev ()
-system call writes
-.I iovcnt
-buffers of data described by
-.I iov
-to the file associated with the file descriptor
-.I fd
-("gather output").
-.P
-The pointer
-.I iov
-points to an array of
-.I iovec
-structures,
-described in
-.BR iovec (3type).
-.P
-The
-.BR readv ()
-system call works just like
-.BR read (2)
-except that multiple buffers are filled.
-.P
-The
-.BR writev ()
-system call works just like
-.BR write (2)
-except that multiple buffers are written out.
-.P
-Buffers are processed in array order.
-This means that
-.BR readv ()
-completely fills
-.I iov[0]
-before proceeding to
-.IR iov[1] ,
-and so on.
-(If there is insufficient data, then not all buffers pointed to by
-.I iov
-may be filled.)
-Similarly,
-.BR writev ()
-writes out the entire contents of
-.I iov[0]
-before proceeding to
-.IR iov[1] ,
-and so on.
-.P
-The data transfers performed by
-.BR readv ()
-and
-.BR writev ()
-are atomic: the data written by
-.\" Regarding atomicity, see https://bugzilla.kernel.org/show_bug.cgi?id=10596
-.BR writev ()
-is written as a single block that is not intermingled with output
-from writes in other processes;
-analogously,
-.BR readv ()
-is guaranteed to read a contiguous block of data from the file,
-regardless of read operations performed in other threads or processes
-that have file descriptors referring to the same open file description
-(see
-.BR open (2)).
-.SS preadv() and pwritev()
-The
-.BR preadv ()
-system call combines the functionality of
-.BR readv ()
-and
-.BR pread (2).
-It performs the same task as
-.BR readv (),
-but adds a fourth argument,
-.IR offset ,
-which specifies the file offset at which the input operation
-is to be performed.
-.P
-The
-.BR pwritev ()
-system call combines the functionality of
-.BR writev ()
-and
-.BR pwrite (2).
-It performs the same task as
-.BR writev (),
-but adds a fourth argument,
-.IR offset ,
-which specifies the file offset at which the output operation
-is to be performed.
-.P
-The file offset is not changed by these system calls.
-The file referred to by
-.I fd
-must be capable of seeking.
-.SS preadv2() and pwritev2()
-These system calls are similar to
-.BR preadv ()
-and
-.BR pwritev ()
-calls, but add a fifth argument,
-.IR flags ,
-which modifies the behavior on a per-call basis.
-.P
-Unlike
-.BR preadv ()
-and
-.BR pwritev (),
-if the
-.I offset
-argument is \-1, then the current file offset is used and updated.
-.P
-The
-.I flags
-argument contains a bitwise OR of zero or more of the following flags:
-.TP
-.BR RWF_DSYNC " (since Linux 4.7)"
-.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
-Provide a per-write equivalent of the
-.B O_DSYNC
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-.TP
-.BR RWF_HIPRI " (since Linux 4.6)"
-High priority read/write.
-Allows block-based filesystems to use polling of the device,
-which provides lower latency, but may use additional resources.
-(Currently, this feature is usable only on a file descriptor opened using the
-.B O_DIRECT
-flag.)
-.TP
-.BR RWF_SYNC " (since Linux 4.7)"
-.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
-Provide a per-write equivalent of the
-.B O_SYNC
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-.TP
-.BR RWF_NOWAIT " (since Linux 4.14)"
-.\" commit 3239d834847627b6634a4139cf1dc58f6f137a46
-.\" commit 91f9943e1c7b6638f27312d03fe71fcc67b23571
-Do not wait for data which is not immediately available.
-If this flag is specified, the
-.BR preadv2 ()
-system call will return instantly if it would have to read data from
-the backing storage or wait for a lock.
-If some data was successfully read, it will return the number of bytes read.
-If no bytes were read, it will return \-1 and set
-.I errno
-to
-.B EAGAIN
-(but see
-.BR BUGS ).
-Currently, this flag is meaningful only for
-.BR preadv2 ().
-.TP
-.BR RWF_APPEND " (since Linux 4.16)"
-.\" commit e1fc742e14e01d84d9693c4aca4ab23da65811fb
-Provide a per-write equivalent of the
-.B O_APPEND
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-The
-.I offset
-argument does not affect the write operation;
-the data is always appended to the end of the file.
-However, if the
-.I offset
-argument is \-1, the current file offset is updated.
-.SH RETURN VALUE
-On success,
-.BR readv (),
-.BR preadv (),
-and
-.BR preadv2 ()
-return the number of bytes read;
-.BR writev (),
-.BR pwritev (),
-and
-.BR pwritev2 ()
-return the number of bytes written.
-.P
-Note that it is not an error for a successful call to transfer fewer bytes
-than requested (see
-.BR read (2)
-and
-.BR write (2)).
-.P
-On error, \-1 is returned, and \fIerrno\fP is set to indicate the error.
-.SH ERRORS
-The errors are as given for
-.BR read (2)
-and
-.BR write (2).
-Furthermore,
-.BR preadv (),
-.BR preadv2 (),
-.BR pwritev (),
-and
-.BR pwritev2 ()
-can also fail for the same reasons as
-.BR lseek (2).
-Additionally, the following errors are defined:
-.TP
-.B EINVAL
-The sum of the
-.I iov_len
-values overflows an
-.I ssize_t
-value.
-.TP
-.B EINVAL
-The vector count,
-.IR iovcnt ,
-is less than zero or greater than the permitted maximum.
-.TP
-.B EOPNOTSUPP
-An unknown flag is specified in \fIflags\fP.
-.SH VERSIONS
-.SS C library/kernel differences
-The raw
-.BR preadv ()
-and
-.BR pwritev ()
-system calls have call signatures that differ slightly from that of the
-corresponding GNU C library wrapper functions shown in the SYNOPSIS.
-The final argument,
-.IR offset ,
-is unpacked by the wrapper functions into two arguments in the system calls:
-.P
-.BI " unsigned long " pos_l ", unsigned long " pos
-.P
-These arguments contain, respectively, the low order and high order 32 bits of
-.IR offset .
-.SH STANDARDS
-.TP
-.BR readv ()
-.TQ
-.BR writev ()
-POSIX.1-2008.
-.TP
-.BR preadv ()
-.TQ
-.BR pwritev ()
-BSD.
-.TP
-.BR preadv2 ()
-.TQ
-.BR pwritev2 ()
-Linux.
-.SH HISTORY
-.TP
-.BR readv ()
-.TQ
-.BR writev ()
-POSIX.1-2001,
-4.4BSD (first appeared in 4.2BSD).
-.\" Linux libc5 used \fIsize_t\fP as the type of the \fIiovcnt\fP argument,
-.\" and \fIint\fP as the return type.
-.\" The readv/writev system calls were buggy before Linux 1.3.40.
-.\" (Says release.libc.)
-.P
-.BR preadv (),
-.BR pwritev ():
-Linux 2.6.30,
-glibc 2.10.
-.P
-.BR preadv2 (),
-.BR pwritev2 ():
-Linux 4.6,
-glibc 2.26.
-.SS Historical C library/kernel differences
-To deal with the fact that
-.B IOV_MAX
-was so low on early versions of Linux,
-the glibc wrapper functions for
-.BR readv ()
-and
-.BR writev ()
-did some extra work if they detected that the underlying kernel
-system call failed because this limit was exceeded.
-In the case of
-.BR readv (),
-the wrapper function allocated a temporary buffer large enough
-for all of the items specified by
-.IR iov ,
-passed that buffer in a call to
-.BR read (2),
-copied data from the buffer to the locations specified by the
-.I iov_base
-fields of the elements of
-.IR iov ,
-and then freed the buffer.
-The wrapper function for
-.BR writev ()
-performed the analogous task using a temporary buffer and a call to
-.BR write (2).
-.P
-The need for this extra effort in the glibc wrapper functions
-went away with Linux 2.2 and later.
-However, glibc continued to provide this behavior until glibc 2.10.
-Starting with glibc 2.9,
-the wrapper functions provide this behavior only if the library detects
-that the system is running a Linux kernel older than Linux 2.6.18
-(an arbitrarily selected kernel version).
-And since glibc 2.20
-(which requires a minimum of Linux 2.6.32),
-the glibc wrapper functions always just directly invoke the system calls.
-.SH NOTES
-POSIX.1 allows an implementation to place a limit on
-the number of items that can be passed in
-.IR iov .
-An implementation can advertise its limit by defining
-.B IOV_MAX
-in
-.I <limits.h>
-or at run time via the return value from
-.IR sysconf(_SC_IOV_MAX) .
-On modern Linux systems, the limit is 1024.
-Back in Linux 2.0 days, this limit was 16.
-.\"
-.\"
-.SH BUGS
-Linux 5.9 and Linux 5.10 have a bug where
-.BR preadv2 ()
-with the
-.B RWF_NOWAIT
-flag may return 0 even when not at end of file.
-.\" See
-.\" <https://lore.kernel.org/linux-fsdevel/fea8b16d-5a69-40f9-b123-e84dcd6e8f2e@www.fastmail.com/T/#u>
-.\" The bug was introduced in
-.\" efa8480a831 fs: RWF_NOWAIT should imply IOCB_NOIO
-.\"and fixed in
-.\" 06c0444290 mm/filemap.c: generic_file_buffered_read() now uses find_get_pages_contig
-.SH EXAMPLES
-The following code sample demonstrates the use of
-.BR writev ():
-.P
-.in +4n
-.EX
-char *str0 = "hello ";
-char *str1 = "world\en";
-ssize_t nwritten;
-struct iovec iov[2];
-\&
-iov[0].iov_base = str0;
-iov[0].iov_len = strlen(str0);
-iov[1].iov_base = str1;
-iov[1].iov_len = strlen(str1);
-\&
-nwritten = writev(STDOUT_FILENO, iov, 2);
-.EE
-.in
-.SH SEE ALSO
-.BR pread (2),
-.BR read (2),
-.BR write (2)