readv(2) System Calls Manual readv(2) readv, writev, preadv, pwritev, preadv2, pwritev2 - (libc -lc) #include ssize_t readv(int fd, const struct iovec *iov, int iovcnt); ssize_t writev(int fd, const struct iovec *iov, int iovcnt); ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset); ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset); ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags); ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags); glibc ( feature_test_macros(7)): preadv(), pwritev(): glibc 2.19: _DEFAULT_SOURCE glibc 2.19 : _BSD_SOURCE readv() iovcnt fd iov (" "). writev() iovcnt iov fd (" "). iov iovec iovec(3type). readv() read(2) . writev() write(2) . . readv() iov[0] iov[1] . ( iov.) writev() iov[0] iov[1] . readv() writev() : writev() readv() ( open(2)). preadv() pwritev() preadv() readv() pread(2). readv() offset . pwritev() writev() pwrite(2). writev() offset . . fd . preadv2() pwritev2() preadv() pwritev() flags . preadv() pwritev() offset -1 . flags OR : RWF_DSYNC ( Linux 4.7) O_DSYNC open(2). pwritev2() . RWF_HIPRI ( Linux 4.6) / . . ( O_DIRECT.) RWF_SYNC ( Linux 4.7) O_SYNC open(2). pwritev2() . RWF_NOWAIT ( 4.14) . preadv2() . . -1 errno EAGAIN ( BUGS). preadv2(). RWF_APPEND ( 4.16) O_APPEND open(2). pwritev2() . offset . offset -1 . RWF_NOAPPEND ( 6.9) O_APPEND open(2). pwritev2(). Linux O_APPEND . pwritev2() offset RWF_NOAPPEND O_APPEND . RWF_ATOMIC ( 6.11) . . pwritev2() . 2 [stx_atomic_write_unit_min, stx_atomic_write_unit_max]. . 32KiB 32KiB 32KiB 48KiB. iovcnt pwritev2() stx_atomic_write_segments_max. O_DIRECT . O_SYNC O_DSYNC open(2). / open(2) ( RWF_SYNC pwritev2()). RWF_DONTCACHE ( 6.14) . / . / /. RWF_DONTCACHE . sync_file_range(2) SYNC_FILE_RANGE_WRITE . RWF_DONTCACHE . -1 errno EOPNOTSUPP. readv() preadv() preadv2() writev() pwritev() pwritev2() . ( read(2) write(2)). -1 errno . read(2) write(2). preadv() preadv2() pwritev() pwritev2() lseek(2). : EINVAL iov_len ssize_t. EINVAL RWF_ATOMIC iov_len offset . EINVAL iovcnt . RWF_ATOMIC stx_atomic_write_segments_max statx. EOPNOTSUPP RWF_DONTCACHE flags . EOPNOTSUPP flags. C preadv() pwritev() . offset : unsigned long pos_l, unsigned long pos 32 32 offset. readv() writev() POSIX.1-2024. preadv() pwritev() BSD. preadv2() pwritev2() . readv() writev() POSIX.1-2001 4.4BSD ( 4.2BSD). preadv() pwritev() 2.6.30 glibc 2.10. preadv2() pwritev2() 4.6 glibc 2.26. IOV_MAX glibc readv() writev() . readv() iov read(2) iov_base iov . writev() write(2). glibc 2.2 . glibc glibc 2.10. glibc 2.9 2.6.18 ( ). glibc 2.20 ( 2.6.32) glibc . POSIX.1 iov. IOV_MAX sysconf(_SC_IOV_MAX). 1024. 2.0 16. 5.9 5.10 preadv2() RWF_NOWAIT 0 . writev(): char *str0 = "hello "; char *str1 = "world\n"; 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); pread(2) read(2) write(2) 3 . . : . 6.18 22 2026 readv(2)