pread, pwrite — read from or write to a file descriptor at a given offset
#include <unistd.h>
ssize_t
pread( |
int fd, |
void *buf, | |
size_t count, | |
off_t offset) ; |
ssize_t
pwrite( |
int fd, |
const void *buf, | |
size_t count, | |
off_t offset) ; |
Note | |||||
---|---|---|---|---|---|
|
pread
() reads up to
count
bytes from file
descriptor fd
at
offset offset
(from
the start of the file) into the buffer starting at buf
. The file offset is not
changed.
pwrite
() writes up to
count
bytes from the
buffer starting at buf
to the file descriptor
fd
at offset
offset
. The file
offset is not changed.
The file referenced by fd
must be capable of
seeking.
On success, pread
() returns
the number of bytes read (a return of zero indicates end of
file) and pwrite
() returns the
number of bytes written.
Note that is not an error for a successful call to transfer fewer bytes than requested (see read(2) and write(2)).
On error, −1 is returned and errno
is set to indicate the cause of the
error.
pread
() can fail and set
errno
to any error specified for
read(2) or lseek(2). pwrite
() can fail and set errno
to any error specified for write(2) or lseek(2).
The pread
() and pwrite
() system calls were added to Linux
in version 2.1.60; the entries in the i386 system call table
were added in 2.1.69. C library support (including emulation
using lseek(2) on older kernels
without the system calls) was added in glibc 2.1.
The pread
() and pwrite
() system calls are especially useful
in multithreaded applications. They allow multiple threads to
perform I/O on the same file descriptor without being
affected by changes to the file offset by other threads.
On Linux, the underlying system calls were renamed in
kernel 2.6: pread
() became
pread64
(), and pwrite
() became pwrite64
(). The system call numbers
remained the same. The glibc pread
() and pwrite
() wrapper functions transparently
deal with the change.
On some 32-bit architectures, the calling signature for these system calls differ, for the reasons described in syscall(2).
POSIX requires that opening a file with the O_APPEND
flag should have no effect on the
location at which pwrite
()
writes data. However, on Linux, if a file is opened with
O_APPEND
, pwrite
() appends data to the end of the
file, regardless of the value of offset
.
This page is part of release 4.07 of the Linux man-pages
project. A
description of the project, information about reporting bugs,
and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.
Copyright (C) 1999 Joseph Samuel Myers. %%%LICENSE_START(VERBATIM) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. %%%LICENSE_END |