readahead - включает
упреждающее
чтение
файла в кэш
страниц
Standard C library (
libc,
-lc)
#define _GNU_SOURCE /* Смотрите feature_test_macros(7) */
#include <fcntl.h>
ssize_t readahead(int fd, off64_t offset, size_t count);
Вызов
readahead()
включает
упреждающее
чтение (initiates readahead)
из файла
таким
образом,
что
последующие
операции
чтения
этого
файла
будут
брать
данные их
кэша и не
блокировать
дисковый
ввод-вывод
(предполагается,
что
упреждающее
чтение
началось
раньше и
что другие
действия в
системе не
выбросили
страницы
из кэша).
Аргумент
fd
— это
файловый
дескриптор
файла для
чтения. В
аргументе
offset
указывает
начальная
точка, от
которой
нужно
читать
данные и в
count задаётся
количество
читаемых
байт.
Ввод-вывод
выполняется
во все
страницы,
так что
offset
эффективно
округляется
в меньшую
сторону к
границе
страницы и
байты
читаются
до границы
следующей
страницы,
большей
или равной
(offset+count). Вызов
readahead() не
выполняет
чтения за
концом
файла.
Файловое
смещение
открытого
файлового
описания,
на который
указывает
файловый
дескриптор
fd, остаётся
неизменным.
On success,
readahead() returns 0; on failure, -1 is returned, with
errno set to indicate the error.
- EBADF
-
fd не
является
допустимым
файловым
дескриптором
или не
открыт на
чтение.
- EINVAL
-
fd
указывает
на файл с
типом,
который
нельзя
использовать
в readahead().
The
readahead() system call appeared in Linux 2.4.13; glibc support has
been provided since glibc 2.3.
Системный
вызов
readahead()
есть
только в Linux, и
не должен
использоваться
в
переносимых
приложениях.
На
некоторых
32-битных
архитектурах
интерфейс
системного
вызова
отличается
от
описанного
выше, по
причинам
указанным
в
syscall(2).
Вызов
readahead()
пытается
запланировать
чтение в
фоновом
режиме и
сразу
завершается.
Однако, он
может
заблокироваться
на время
чтения
метаданных
файловой
системы,
необходимых
для
обнаружения
запрашиваемых
блоков. Это
часто
происходит
ext[234] для
больших
файлов, у
которых
используются
косвенные
(indirect) блоки
вместо
непрерывных
(extents), что
приводит к
блокировке
вызова на
время
прочтения
нужных
данных.
lseek(2),
madvise(2),
mmap(2),
posix_fadvise(2),
read(2)
Русский
перевод
этой
страницы
руководства
был сделан
aereiae <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitriy S. Seregin <
[email protected]>,
Katrin Kutepova <
[email protected]>, Lockal
<
[email protected]>, Yuri Kozlov <
[email protected]>,
Баринов
Владимир и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]