pread(), pread64()

Чтение из файла без смещения файлового указателя

Прототип:

#include <unistd.h>
ssize_t pread( int filedes,
void *buff,
size_t nbytes,
off_t offset );
ssize_t pread64( int filedes,
void *buff,
size_t nbytes,
off64_t offset );

Аргументы:

filedes
Дескриптор файла, из которого происходит чтение.
buff
Указатель на буфер, в котором функция может хранить прочитанные данные.
nbytes
Количество считываемых данных в байтах.
offset
Начальная позиция для чтения из файла в байтах.

Библиотека:

libc

Описание:

Функция pread() аналогична read(), за исключением того, что она читает с указанной позиции в файле без изменения его указателя чтения.

Функция pread() позволяет читать вплоть до максимального значение смещения off_t. Попытка выполнить pread() для файла, который не позволяет изменять позицию указателя чтения, приводит к ошибке.

Функция pread64() является 64-битной версией pread().

Возвращаемое значение:

Число считанных байт данных. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
Для дескриптора файла установлен флаг O_NONBLOCK и процесс будет задержан при операции чтения.
EBADF
Дескриптор файла fildes не является допустимым дескриптором файла, открытым для чтения.
EINTR
Операция была прервана сигналом и при этом либо данные не были переданы, либо менеджер ресурсов, ответственный за этот файл, не сообщил о частичной передаче.
EIO
Произошла физическая ошибка ввода-вывода (например, плохой блок на диске). Точное значение зависит от устройства.
ENOSYS
Функция pread() не реализована для файловой системы, ассоциированной с filedes.

Классификация:

pread() — POSIX 1003.1 XSI; pread64() — Поддержка больших файлов

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), pwrite(), read(), readblock(), readv(), select(), write(), writeblock(), writev()




Предыдущий раздел: Описание API системной библиотеки