table of contents
PREAD(2) | Руководство программиста Linux | PREAD(2) |
ИМЯ¶
pread, pwrite - чтение или запись информации из файлового дескриптора согласно заданному смещению
ОБЗОР¶
#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);
Требования
макроса
тестирования
свойств
для glibc (см.
feature_test_macros(7)):
pread(), pwrite():
|| /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
ОПИСАНИЕ¶
pread() читает максимум count байтов из файлового дескриптора fd, начиная со смещения offset (от начала файла), в буфер, начиная с buf. Текущая позиция файла не изменяется.
pwrite() записывает максимум count байтов из буфера buf в файловый дескриптор fd , начиная со смещения offset. Текущая позиция файла не изменяется.
Файл, заданный в fd, должен позволять изменение смещения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При удачном завершении вызова возвращается количество прочитанных или записанных байтов (0 в случае выполнения функции pwrite() означает, что никакой информации не было записано, а в случае выполнения функции pread() означает конец файла). При ошибке возвращается -1, а переменной errno присваивается номер ошибки.
ОШИБКИ¶
Вызов pread() может завершиться неудачно и записать в errno один из кодов ошибки, определённых для read(2) или lseek(2). Вызов pwrite() может завершиться неудачно и записать в errno один из кодов ошибки, определённых для write(2) или lseek(2).
ВЕРСИИ¶
Системные вызовы pread() и pwrite() были внесены в ядро Linux, начиная с версии 2.1.60; как элементы таблицы системных вызовов i386 были добавлены в ядро версии 2.1.69. Поддержка в библиотеке С (включая эмуляцию с помощью lseek(2) в старых ядрах, не имеющих соответствующих системных вызовов) была добавлена в glibc 2.1.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
POSIX.1-2001.
ЗАМЕЧАНИЯ¶
В Linux нижележащие системные вызовы переименованы в ядре версии 2.6: pread() стал называться pread64(), а pwrite() — pwrite64(). Номера системных вызовов остались прежними. Обёрточные функции pread() и pwrite() в glibc скрывают данные переименование.
ДЕФЕКТЫ¶
Согласно POSIX требуется, чтобы открытие файла с флагом O_APPEND не влияло на расположение, по которому pwrite() записывает данные. Однако в Linux, если файл открывается с флагом O_APPEND, pwrite() добавляет данные в конец файла, независимо от значения offset.
СМОТРИТЕ ТАКЖЕ¶
2012-04-30 | Linux |