Главная » 2017 » Ноябрь » 21 » man 2 readahead
01:28
man 2 readahead

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


readahead - включает упреждающее чтение файла в кэш страниц



ОБЗОР


#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, остаётся неизменным.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении readahead() возвращает 0. В случае ошибки возвращается -1,
а errno устанавливается в соответствующее значение.



ОШИБКИ


EBADF fd не является допустимым файловым дескриптором или не открыт на чтение.

EINVAL fd указывает на файл с типом, который нельзя использовать в readahead().



ВЕРСИИ


Системный вызов readahead() появился в Linux 2.4.13; поддержка в glibc началась с
версии 2.3.



СООТВЕТСТВИЕ СТАНДАРТАМ


Системный вызов readahead() есть только в Linux, и не должен использоваться в
переносимых приложениях.



ЗАМЕЧАНИЯ


На некоторых 32-битных архитектурах интерфейс системного вызова отличается от
описанного выше, по причинам указанным в syscall(2).



ДЕФЕКТЫ


Вызов readahead() пытается запланировать чтение в фоновом режиме и сразу
завершается. Однако, он может заблокироваться на время чтения метаданных файловой
системы, необходимых для обнаружения запрашиваемых блоков. Это часто происходит
ext[234] для больших файлов, у которых используются косвенные (indirect) блоки
вместо непрерывных (extents), что приводит к блокировке вызова на время прочтения
нужных данных.



СМОТРИТЕ ТАКЖЕ


lseek(2), madvise(2), mmap(2), posix_fadvise(2), read(2)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 24 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar