fmpio(3) fmpio(3)
NAME
MPset, MPget, MPopen, MPclose, MPflush, MPseek, MPread, MPwrite - File Memory Buffer Pool Stdio Interface
SYNOPSIS
#include <fmpio.h> extern int MPset ( int pagesize, int maxcache, int flags ); extern int MPget ( int *pagesize, int *maxcache, int flags ); extern MPFILE *MPopen ( const char *path, int flags ); extern int MPclose(MPFILE *mpfs); extern int MPflush(MPFILE *mpfs); extern int MPseek ( MPFILE *mpfs, off_t offset, int whence ); extern int MPread ( MPFILE *mpfs, void *buf, size_t nbytes ); extern int MPwrite ( MPFILE *mpfs, void *buf, size_t nbytes );
PARAMETERS
int pagesize IN: pagesize to use for next open/create. int maxcache IN: max number of pages to cache. int flags (MPset) IN: flags = 0, MP_PAGEALL. int *pagesize OUT: pagesize to used in last open/create. int *maxcache OUT: max number of pages cached in last open/create. int flags (MPget) IN:. const char *path IN: filename. int flags (MPopen) IN: DFACC_CREATE, DFACC_READ, DFACC_WRITE, DFACC_RDWR, DFACC_ALL. MPFILE *mpfs IN: File Memory pool handle. off_t offset IN: Offset into the file. int whence IN: SEEK_CUR, SEEK_SET, SEEK_END. void *buf (MPread) IN: User buffer to read data into. size_t nbytes (MPread) IN: number of bytes to read in. void *buf (MPwrite) IN: User buffer to write data from. size_t nbytes (MPwrite) IN: number of bytes to write out.
DESCRIPTION
MPset Set the pagesize and maximum number of pages to cache on the next open/create of a file. A pagesize that is a power of 2 is recommended. The values set here only affect the next open/creation of a file and do not change a particular file's paging behaviour after it has been opened or created. This maybe changed in a later release. Use flags arguement of 'MP_PAGEALL' if the whole file is to be cached in memory otherwise passs in zero. MPget This gets the last pagesize and maximum number of pages cached for the last open/create of a file. MPopen Open/Create the file for reading/writing and create a memory pool for the file. Currently we let the library decide whether to use the default PAGESIZE for creating pages and MAXCACHE for number of pages to cache in the pool. MPclose First sync the file memory pool to disk. Next close the file memory pool. Finally close the file. MPflush Flushes the file memory pool to disk. MPseek Seeks to the correct page in the file depending upon the offset and the flag 'whence'. Similiar to the stdio routine. Assumes the flags values for SEEK_SET, SEEK_CUR and SEEK_END are universal. May not be true for non-Unix OS's. MPread This routine handles getting the correct pages to read to satisfy the request. The data is then copied from the memory pool into the user's buffer. MPwrite This routine handles getting the correct pages to write to satisfy the request. The data is then copied from the user's buffer to the memory pool.
RETURNS
MPset Returns SUCCEED if successful and FAIL otherwise. MPget Returns SUCCEED. MPopen Pointer to MPFILE struct if successful and NULL otherwise. MPclose Returns SUCCEED on success and FAIL otherwise. MPflush Returns SUCCEED on success and FAIL otherwise. MPseek Returns offset into the file on success and FAIL otherwise. MPread Returns number of bytes read if successful and FAIL otherwise. MPwrite Returns number of bytes written if successful and FAIL otherwise.
NAME
MPset MPset - set pagesize and maximum number of pages to cache on next open/create. MPget MPget - get last pagesize and max number of pages cached for open/cre- ate. MPopen MPopen - open/create the file and create a memory pool for file. MPclose MPclose - close the file, sync the file memory pool to disk and close it. MPflush MPflush - flush file memory pool to disk. MPseek MPseek - seek to the specified file offset in the memory pool. MPread MPread - read 'nbytes' from file memory pool into 'buf'. MPwrite MPwrite - write 'nbytes' form 'buf' to the file memory pool.
NOTE
MPset Currently 'maxcache' has to be greater than 1. Maybe use special case of 0 to specify you want to turn page buffering off or use the flags arguement. Current memory usage overhead for the Memory Pool is approximately ~(2k + maxcache*(28+pagesize) + npages*20) bytes. MPseek Note that it returns an 'int' as opposed to 'off_t'. This is because the HDF library still deals with file offsets in terms of signed inte- gers....*sigh*...hopefully This will be changed in a future release. MPread The memcpy from the buffer pool to the users buffer is an expensive operation. MPwrite The memcpy from the the users buffer to the memory pool is an expensive operation.
CONTACT
George Velamparampil <georgev@ncsa.uiuc.edu> NCSA Software Development Group HDF Group 152 Computing Applications Bldg. 605 E. Springfield Ave. Champaign, IL 61820 c2man fmpio.h 2 February 1996 fmpio(3)
hdf 4.2r4 - Generated Fri Feb 6 07:42:16 CST 2009