manpagez: man pages & more
info gdbm
Home | html | info | man

File: gdbm.info,  Node: Sync,  Next: Database format,  Prev: Reorganization,  Up: Top

11 Database Synchronization
***************************

Normally, 'GDBM' functions don't flush changed data to the disk
immediately after a change.  This allows for faster writing of databases
at the risk of having a corrupted database if the application terminates
in an abnormal fashion.  The following function allows the programmer to
make sure the disk version of the database has been completely updated
with all changes to the current time.

 -- gdbm interface: int gdbm_sync (GDBM_FILE DBF)
     Synchronizes the changes in DBF with its disk file.  The parameter
     is a pointer returned by 'gdbm_open'.

     This function would usually be called after a complete set of
     changes have been made to the database and before some long waiting
     time.  This set of changes should preserve application-level
     invariants.  In other words, call 'gdbm_sync' only when the
     database is in a consistent state with regard to the application
     logic, a state from which you are willing and able to recover.  You
     can think about all database operations between two consecutive
     'gdbm_sync' calls as constituting a single "transaction".  *Note
     Synchronizing the Database::, for a detailed discussion about how
     to properly select the synchronization points.

     The 'gdbm_close' function automatically calls the equivalent of
     'gdbm_sync' so no call is needed if the database is to be closed
     immediately after the set of changes have been made.

     'Gdbm_sync' returns 0 on success.  On error, it sets 'gdbm_errno'
     and system 'errno' variables to the codes describing the error and
     returns -1.

   Opening the database with 'GDBM_SYNC' flag ensures that 'gdbm_sync'
function will be called after each change, thereby flushing the changes
to disk immediately.  You are advised against using this flag, however,
because it incurs a severe performance penalty, while giving only a
moderate guarantee that the _structural_ consistency of the database
will be preserved in case of failure, and that only unless the failure
occurs while being in the 'fsync' call.  For the ways to ensure proper
_logical_ consistency of the database, see *note Crash Tolerance::.

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.