Provided by: libbobcat-dev_6.11.00-1_amd64 bug

NAME

       FBB::Flock - allows multiple programs to synchronize access to the information they use

SYNOPSIS

       #include <bobcat/classname>
       Linking option: -lpthread -lbobcat

DESCRIPTION

       When  multiple  programs  need  to  access the same information (e.g., on files or in shared memory) then
       accessing that information should be synchronized. While multiple programs can read  the  information  in
       parallel,  only  one  program should be allowed to write/modify the information to avoid data corruption.
       The class FBB::Flock allows program to synchronize reading/writing to  files  by  locking  access  to  an
       existing  (or  newly  created)  lock  file.  Locking can be exclusive, in which case only one program can
       access the information (commonly used when writing  information),  or  shared,  in  which  case  multiple
       programs can access the information (commonly used when reading information).

       Using  Flock’s  locking facilities is comparable to using mutexes by multi-threaded programs: if programs
       (or threads of multi-threaded programs) do not use locking facilities then those  programs  (or  threads)
       can  break the data’s integrity. Consequently multiple programs accessing the same information should use
       locking.

NAMESPACE

       FBB
       All constructors, members, operators and manipulators, mentioned in this man-page,  are  defined  in  the
       namespace FBB.

INHERITS FROM

       -

CONSTRUCTORS

       o      Flock():
              The  default  constructor  initializes a Flock object. The object cannot yet offer synchronization
              facilities since no lock file has been defined. See also the member setFilename below.

       o      Flock(std::string filename, mode_t mode = 0600):
              This constructor initializes a an Flock object using filename as its lock file. Multiple  programs
              can specify the same file name, allowing them to synchronize their read/write actions. If filename
              does  not  already  exist it is created using access mode mode. Merely constructing a Flock object
              does not activate locking. To (un)lock member functions are available (see below).  )

       Copy and move constructors (and assignment operators) are not available.

       When an FBB::Flock object ceases to exist and the object  has  acquired  a  lock  then  the  FBB::Flock’s
       destructor releases the lock.

MEMBER FUNCTIONS

       Requesting  a  shared  lock  succeeds  if  no other program has obtained an exclusive lock. Requesting an
       exclusive lock succeeds if not other program has obtained eithr a shared or an exclusive lock.

       o      int fd() const:
              The file descriptor associated with the current lock file is returned. If no lock  file  has  been
              specified -1 is returned.

       o      std::string const &filename() const:
              The  name  of  the  lock  file  is  returned. If no lockfile has been specified an empty string is
              returned.

       o      void exclusive() const:
              This member returns once the program has obtained an exclusive lock.

       o      bool exclusive(std::chrono::duration<Amount, Resolution> const &time):
              Returns true when an exclusive lock was obtained  within  time  time  units,  otherwise  false  is
              returned. E.g., exclusive(4s) waits for at most four seconds to obtain a exclusive lock.
              An exception is thrown if no lock file was specified.

       o      void setFilename(std::string const filename):
              The FBB::Flock objects uses filename as its lock file name. If the object has currently acquired a
              lock it is released. This member does not acquire a lock for filename.

       o      void shared() const:
              This member returns once the program has obtained a shared lock.

       o      bool shared(std::chrono::duration<Amount, Resolution> const &time):
              Returns  true when a shared lock was obtained within time time units, otherwise false is returned.
              E.g., shared(4s) waits for at most four seconds to obtain a shared lock.
              An exception is thrown if no lock file was specified.

       o      void unlock() const:
              This member releases the lock obtained by the Flock object.
              An exception is thrown if no lock file was specified.

EXAMPLE

           #include <iostream>
           c
           #include <bobcat/flock>

           using namespace std;
           using namespace FBB;

           int main(int argc, char **argv)
           try
           {
               if (argc < 3)
               {
                   cerr << "need lockfile name and e or .\n";
                   return 1;
               }

               Flock flock{ argv[1] };
               cout << "FD = " << flock.fd() << ’\n’;

               if (string str; *argv[2] == ’e’)
               {
                   flock.exclusive();
                   cout << "press Enter... ";
                   getline(cin, str);
               }
               else
               {
                   bool ok = flock.exclusive(3s);
                   cout << "obtained a lock: " << ok << ’\n’;
                   if (ok)
                   {
                       cout << "press Enter... ";
                       getline(cin, str);
                   }
               }
           }
           catch (...)
           {
               cerr << "caught an exception\n";
           }

FILES

       bobcat/flock - defines the class interface

SEE ALSO

       bobcat(7), flock(2), the std::chrono namespace

BUGS

       None Reported.

BOBCAT PROJECT FILES

       o      https://fbb-git.gitlab.io/bobcat/: gitlab project page;

       Debian Bobcat project files:

       o      libbobcat6: debian package containing the shared library, changelog and copyright note;

       o      libbobcat-dev: debian package containing the static library, headers, manual pages, and  developer
              info;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

COPYRIGHT

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

libbobcat-dev_6.11.00                               2005-2025                                FBB::Flock(3bobcat)