readblock()

Считать блоки данных из файла

Прототип:

#include <unistd.h>
int readblock( int fd,
size_t blksize,
unsigned block,
int numblks,
void *buff );

Аргументы:

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

Библиотека:

libc

Описание:

Функция readblock() считывает numblks блоков данных из файла, связанного с открытым файловым дескриптором fd, в буфер buff, начиная с блока block (блоки нумеруются, начиная с 0). Аргумент blksize задает размер блока в байтах.

Эта функция полезна для прямого доступа к необработанным блокам на специальном блочном устройстве (например, к необработанным дисковым блокам), но также может использоваться, например, для высокоскоростного доступа к файлам базы данных. Прирост скорости достигается за счет комбинированного поиска/чтения, неявного в этом вызове, и возможности передавать за раз больше, чем ограничение функции read() в INT_MAX байт.

Если numblks равно нулю, readblock() возвращает ноль.

При успешном завершении readblock() возвращает количество блоков, фактически прочитанных и помещенных в буфер. Это число никогда не превышает numblks. Возвращаемое значение может быть меньше numblks, если происходит одно из следующих событий:

Если ошибка чтения возникает в первом блоке, readblock() возвращает -1 и устанавливает errno в EIO.

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

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

Коды ошибок:

EBADF
Аргумент fd не является допустимым файловым дескриптором, открытым для чтения блочно-ориентированного устройства.
EIO
Произошла ошибка физического чтения в первом блоке.
EINVAL
Начальная позиция недействительна (0 или отрицательное значение) или находится за пределами конца диска.

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

ЗОСРВ «Нейтрино»

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

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

writeblock()




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