Section (2) pread
pread, pwrite — read from or write to a file descriptor at a given offset
|const void *buf,|
pread() reads up to
count bytes from file
the start of the file) into the buffer starting at
buf. The file offset is not
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
the number of bytes read (a return of zero indicates end of
pwrite() returns the
number of bytes written.
On error, −1 is returned and
errno is set to indicate the cause of the
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.
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.
C library/kernel differences
On Linux, the underlying system calls were renamed in
pwrite64(). The system call numbers
remained the same. The glibc
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
writes data. However, on Linux, if a file is opened with
pwrite() appends data to the end of the
file, regardless of the value of
This page is part of release 5.04 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
Copyright (C) 1999 Joseph Samuel Myers.
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
Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.