Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       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 <azamat.hackimov@gmail.com>,
       kogamatranslator49    <r.podarov@yandex.ru>,    Kogan,   Max   Is   <ismax799@gmail.com>,   Yuri   Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное  письмо
       на man-pages-ru-talks@lists.sourceforge.net.

Linux man-pages 6.03                            4 декабря 2022 г.                                       pread(2)