|
|
|
bfl_util
- Big File UtilitiesThe BFL_UTIL package provides a high-level interface for reading and writing logical files greater than 2GB in size (the typical UNIX limit on physical file size).
A logical "big file" is broken down into multiple physical files, each less than the maximum physical file size:
basePathname_bfl0 basePathname_bfl1 basePathname_bfl2 ... basePathname_bflN
When the size of an individual file reaches the maximum allowable size (a
configurable parameter), the next file in sequence is created. For
example, suppose a logical write to xyz
begins in its last
physical file, xyz_bfl22
. If xyz_bfl22
fills up
before the write is complete, then xyz_bfl23
is created and
the write continues.
The following code fragment creates a 7GB logical file filled with over a billion "Hello!" records:
#include "bfl_util.h" -- Big file utilities. BigFile file ; int i ; ... bflOpen ("pathname", "-write", &file) ; for (i = 0 ; i < 1*1024*1024*1024 ; i++) bflWrite (file, strlen ("Hello!") + 1, "Hello!", NULL) ; bflClose (file, NULL) ;
and the following code fragment counts the number of records in the file:
char buffer[] = "Hello!" ; -- Sized to hold a "Hello!" record. int numRecords = 0 ; ... bflOpen ("pathname", "-read", &file) ; while (!bflRead (file, sizeof buffer, buffer, NULL)) numRecords++ ; bflClose (file, NULL) ;
You can seek to an arbitrary position in the logical file as follows:
QuadWord position = qwCreate (0, 1234) ; ... bflSetPos (file, position) ; -- Seek to offset 1234 in file.
Removing a logical file deletes all of its physical files:
bflRemove ("pathname") ;
bflClose()
- closes a big file.
bflGetPos()
- gets the current I/O position in a big file.
bflOpen()
- opens/creates a big file.
bflRead()
- reads data from a big file.
bflRemove()
- removes a big file.
bflSetPos()
- sets the current I/O position in a big file.
bflWrite()
- writes data to a big file.
bfl_util.c
bfl_util.h