MPOOL(3)

명칭
mpool - 공유 메모리밧파프르

서식
<db.h> <mpool.h> MPOOL * mpool_open(void *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 (은)는, 버퍼 (을)를 공유하는 복수의 프로세스간에 네고시에이트 하기 위해서 사용된다 byte string입니다. 파일 버퍼가 공유 메모리에 MAP 되었을 경우는, 같은 키를 사용하고 있는 모든 프로세스가 버퍼를 공유합니다. key 하지만 NULL 인 경우, 버퍼는 프라이베이트메모리에 MAP 됩니다. 인수 fd (은)는, 기초가 된다 파일의 파일 기술자로, 검색 가능하게 되어 있을 필요가 있습니다. key 하지만 NULL (이)가 아니고, 벌써 MAP 되고 있는 파일과 일치하는 경우, 인수 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() 하지만 돌려준 주소가 아니면 안됩니다. flags 파라미터는 이하의 값의 논리합 ( or )에 의해 지정됩니다.

MPOOL_DIRTY
    페이지가 수정되고 있어 보존 파일에 기입할 필요가 있습니다.

함수 mpool_put() (은)는, 정상 종료시에는 0 을 돌려주어, 에러 때는 -1 을 돌려줍니다.

함수 mpool_sync() (은)는, MPOOL 포인터에 대해서, 변경된 모든 페이지를 보존 파일에 기입합니다. mpool_sync() (은)는, 정상 종료시에는 0 을 돌려주어, 에러 때는 -1 을 돌려줍니다.

함수 mpool_close() (은)는, 메모리프르쿡키에 대해서 할당해진 메모리를 해방합니다. 수정된 페이지는, 보존 파일에 기입해지고 선 mpool_close() (은)는, 정상 종료시에는 0 을 돌려주어, 에러 때는 -1 을 돌려줍니다.

에러
함수 mpool_open() 그리고 에러가 발생하면(자), 프로그램 라이브러리 routine malloc(3) 그리고 지정된 에러의 errno 하지만 세트 됩니다.

함수 mpool_get() 그리고 에러가 발생하면(자), 이하의 errno 하지만 세트 됩니다.

[EINVAL]
    요구된 레코드가 존재하지 않는다.

함수 mpool_new() (와)과 mpool_get() 그리고 에러가 발생하면(자), 프로그램 라이브러리 routine read(2), write(2), malloc(3) 그리고 지정된 에러의 errno 하지만 세트 됩니다.

함수 mpool_sync() 그리고 에러가 발생하면(자), 프로그램 라이브러리 routine write(2) 그리고 지정된 에러의 errno 하지만 세트 됩니다.

함수 mpool_close() 그리고 에러가 발생하면(자), 프로그램 라이브러리 routine free(3) 그리고 지정한 에러의 errno 하지만 세트 됩니다.

관련 항목
btree(3), dbopen(3), hash(3), recno(3)