Provided by: manpages-ru-dev_4.27.0-1_all 

НАИМЕНОВАНИЕ
pread, pwrite - чтение или запись информации из файлового дескриптора согласно заданному смещению
БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)
ОБЗОР
#include <unistd.h>
ssize_t pread(int fd, void buf[.count], size_t count,
off_t offset);
ssize_t pwrite(int fd, const void buf[.count], size_t count,
off_t offset);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
pread(), pwrite():
_XOPEN_SOURCE >= 500
|| /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
ОПИСАНИЕ
pread() читает максимум count байтов из файлового дескриптора fd, начиная со смещения offset (от начала
файла), в буфер, начиная с buf. Текущая позиция файла не изменяется.
pwrite() записывает максимум count байтов из буфера buf в файловый дескриптор fd , начиная со смещения
offset. Текущая позиция файла не изменяется.
Файл, заданный в fd, должен позволять изменение смещения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении pread() возвращается количество считанных байт (ноль указывает на конец файла), а
pwrite() — количество записанных байт.
Заметим, что для успешного выполнения не считается ошибкой передача меньшего количества байт чем
запрошено (смотрите read(2) и write(2)).
В случае ошибки возвращается -1, а errno устанавливается в значение ошибки.
ОШИБКИ
Вызов pread() может завершиться неудачно и записать в errno один из кодов ошибки, определённых для
read(2) или lseek(2). Вызов pwrite() может завершиться неудачно и записать в errno один из кодов ошибки,
определённых для write(2) или lseek(2).
СТАНДАРТЫ
POSIX.1-2008.
ИСТОРИЯ
POSIX.1-2001.
Added in Linux 2.1.60; the entries in the i386 system call table were added in Linux 2.1.69. C library
support (including emulation using lseek(2) on older kernels without the system calls) was added in glibc
2.1.
Отличия между библиотекой C и ядром
On Linux, the underlying system calls were renamed in Linux 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.
На некоторых 32-битных архитектурах интерфейс этих системных вызовов отличается от описанного выше по
причинам, указанным в syscall(2).
ПРИМЕЧАНИЯ
Системные вызовы pread() и pwrite() особенно полезны в многонитевых приложениях. Они позволяют
нескольким нитям выполнять ввод-вывод в один файловый дескриптор не учитывая изменений файлового
смещения, сделанного другими нитями.
ОШИБКИ
Согласно POSIX требуется, чтобы открытие файла с флагом O_APPEND не влияло на расположение, по которому
pwrite() записывает данные. Однако в Linux, если файл открывается с флагом O_APPEND, pwrite() добавляет
данные в конец файла, независимо от значения offset.
СМОТРИТЕ ТАКЖЕ
lseek(2), read(2), readv(2), write(2)
ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Alexey, Azamat Hackimov
<azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Darima Kogan
<silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов
<pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной
лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
переводчиков.
Справочные страницы Linux 6.9.1 2 мая 2024 г. pread(2)