mpool - массив буферов разделяемой памяти
НАЗВАНИЕmpool - массив буферов разделяемой памяти
СИНТАКСИС
#include
#include
MPOOL *
mpool_open (DBT *key, int fd, pgno_t pagesize, pgno_t maxcache);
void
mpool_filter (MPOOL *mp, void (*pgin)(void *, pgno_t, void *),
void (*pgout)(void *, pgno_t, void *), void *pgcookie);
void *
mpool_new (MPOOL *mp, pgno_t *pgnoaddr);
void *
mpool_get (MPOOL *mp, pgno_t pgno, u_int flags);
int
mpool_put (MPOOL *mp, void *pgaddr, u_int flags);
int
mpool_sync (MPOOL *mp);
int
mpool_close (MPOOL *mp);
ОПИСАНИЕ
Mpool является библиотечным интерфейсом, цель которого -
обеспечить Вас ориентированным на страницы буферным
управлением файлами. Буферы могут разделяться разными
процессами.
Функция mpool_open инициализирует массив памяти. Параметр
key является строкой байтов, используемых для сообщения
нескольких процессов (желающих разделять буферы) друг с
другом. Если файловые буферы отражены в разделяемой
памяти, то все процессы, использующие одинаковый параметр,
будут разделять буферы. Если параметр key равен NULL, то
буферы размещены в частной (выделенной) памяти. Параметр
fd является описателем связанного файла, который должен
быть доступен для поиска. Если параметр key не равен NULL
и совпадает с ранее отраженным файлом, то параметр fd
игнорируется.
Параметр pagesize является размером (в байтах) страниц, на
которых по частям располагается файл. Параметр maxcache
является максимальным количеством страниц основного файла,
которое можно кэшировать в любой момент времени. Это
значение не связано с количеством процессов, которые
разделяют файловые буферы, но будет являться наибольшим
значением, определенным любым из процессов, разделяющих
файл.
Функция mpool_filter предназначена для создания
"прозрачной" обработки операций ввода и вывода доступных
страниц. Если определена функция pgin, то она вызывается
каждый раз, когда данные буфера считываются и
записываются в память массива из внешнего файла. Если
определена функция pgout, то она вызывается каждый раз,
когда данные буфера записываются во внешний файл. Обе
функции вызываются с помощью указателя pgcookie, номера
страницы и указателя на страницу, используемую для чтения
или записи.
Функция mpool_new рассматривает указатель MPOOL и адрес
как параметры. Если может быть выделена новая страница, то
возвращается указатель на страницу и сохраняемому номеру
страницы присваивается адрес pgnoaddr. Иначе возвращается
NULL и меняется значение переменной errno.
Функция mpool_get рассматривает указатель MPOOL и номер
страницы как параметры. Если страница существует, то
возвращается указатель на страницу. Иначе возвращается
NULL и меняется значение переменной errno. Параметр flags
в данный момент не используется.
Функция mpool_put "открепляет" страницу, на которую
указывает pgaddr. Значение Pgaddr должно быть адресом,
ранее возвращенным mpool_get или mpool_new. Значение flag
определено с помощью операции ИЛИ для следующих значений:
MPOOL_DIRTY
(страница была изменена и должна быть записана во
внешний файл);
Mpool_put (возвращает 0 при нормальном завершении работы и
-1 при ошибках);
функция mpool_sync записывает все измененные страницы,
связанные с указателем MPOOL, во внешний файл; Mpool_sync
возвращает 0 при нормальном завершении работы и -1 при
ошибках;
функция mpool_close освобождает любую распределенную
память, связанную с идентификатором массива памяти.
Измененные страницы НЕ записываются во внешний файл.
Mpool_close возвращает 0 при нормальном завершении работы
и -1 при ошибках.
КОДЫ ОШИБОК
При ошибках функция mpool_open устанавливает значение
переменной errno равным определенному в функции malloc(3).
Функция mpool_get при ошибках устанавливает значение
переменной errno равным следующему:
[EINVAL] (запрошенной записи не существует).
Функции mpool_new и mpool_get при ошибках устанавливают
значение переменной errno равным ошибке, определенной в
функциях read(2), write(2) и malloc(3).
Функция mpool_sync при ошибках устанавливает значение
переменной errno равным ошибке, определенной в функции
write(2).
Функция mpool_close при ошибках устанавливает значение
переменной errno равным ошибке, определенной в функции
free(3).