ИМЯ
pread, pwrite - чтение или запись информации из файлового дескриптора согласно заданному смещениюLIBRARY
Standard C library ( 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).ВЕРСИИ
The pread() and pwrite() system calls were 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.СТАНДАРТЫ
POSIX.1-2001, POSIX.1-2008.ЗАМЕЧАНИЯ
Системные вызовы pread() и pwrite() особенно полезны в многонитевых приложениях. Они позволяют нескольким нитям выполнять ввод-вывод в один файловый дескриптор не учитывая изменений файлового смещения, сделанного другими нитями.Отличия между библиотекой 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).ДЕФЕКТЫ
Согласно POSIX требуется, чтобы открытие файла с флагом O_APPEND не влияло на расположение, по которому pwrite() записывает данные. Однако в Linux, если файл открывается с флагом O_APPEND, pwrite() добавляет данные в конец файла, независимо от значения offset.СМ. ТАКЖЕ
lseek(2), read(2), readv(2), write(2)ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov <[email protected]>, kogamatranslator49 <[email protected]>, Kogan, Max Is <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]> Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]4 декабря 2022 г. | Linux man-pages 6.03 |