logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

FBB::Selector - Timed delays, Alarms and Multiple File I/O.

Author

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

libbobcat-dev_6.07.01                               2005-2025                             FBB::Selector(3bobcat)

Bobcat

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

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;

Bugs

       None reported

Constructors

       o      Selector():
              This constructor initializes the object.

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

Description

FBB::Selector  objects  are  wrappers  around  the  select(2)  system calls and allow timed delays, alarm
       functionality and/or multiple file I/O. It requires the  use  of  filedescriptors,  which  are  not  an
       official part of C++. However, most operating systems offer filedescriptors. Sockets are well-known file
       descriptors.

Example

       #include <string>
       #include <iostream>

       #include <bobcat/selector>
       #include <bobcat/exception>

       using namespace std;
       using namespace FBB;

       int main(int argc, char **argv, char **envp)
       try
       {
           Selector selector;

           selector.setAlarm(5);               // every 5 secs: alarm fires
           selector.addReadFd(STDIN_FILENO);   // look also at cin

           while (true)
           {
               if (!selector.wait())           // 0: alarm fires
                   cout << "Are you still there?" << endl;
               else
               {
                   string s;
                   if (!getline(cin, s) || !s.length())
                       return 0;
                   cout << "Thank you for: " << s << endl;
               }
           }
       }
       catch (Exception const &e)
       {
           cout << e.what() << ’\n’;
           return 1;
       }

Files

bobcat/selector - defines the class interface

Inherits From

       -

Member Functions

       o      voidaddExceptFd(intfd):
              Adds a filedescriptor to the set of file descriptors that are monitored for exceptions (note these
              are not C++ exceptions. See man2select for details).

       o      voidaddReadFd(intfd):
              Adds a filedescriptor to the set of file descriptors that are monitored for reading.

       o      voidaddWriteFd(intfd):
              Adds a filedescriptor to the set of file descriptors that are monitored for writing.

       o      intexceptFd():
              Returns -1 of no more file descriptors are available in the exception category. Otherwise the next
              available file descriptor in the  exception  category  is  returned.  Returning  from  wait,  this
              function can be called repeatedly until -1 is returned, servicing each available filedescriptor in
              turn.

       o      voidnoAlarm():
              This member prevents any timeout-alarm from occurring.

       o      intnReady():
              Returns  the  number  of  available file descriptors.  0 is returned at a timeout, -1: is returned
              when select(2) itself failed.

       o      intreadFd():
              Returns -1 of no more file descriptors are available for reading.  Otherwise  the  next  available
              file  descriptor  for  reading  is  returned.  Returning  from  wait,  this function can be called
              repeatedly until -1 is returned, servicing each available filedescriptor in turn.  Note  that  the
              file whose file descriptor is returned by readFd may also be at its end-of-file position. The file
              is  `ready for reading’, but no characters will be returned when trying to read from it due to its
              end-of-file status. In that case the file descriptor is probably best  removed  from  the  set  of
              active file descriptors.

       o      voidrmExceptFd(intfd):
              Removes  a filedescriptor from the set of file descriptors that are monitored for exceptions (note
              these are not C++ exceptions. See man2select for details).

       o      voidrmReadFd(intfd):
              Removes a filedescriptor from the set of file descriptors that are monitored for reading.

       o      voidrmWriteFd(intfd):
              Removes a filedescriptor from the set of file descriptors that are monitored for writing.

       o      voidsetAlarm(intsec,intusec=0):
              This member sets the alarm at the indicated seconds and micro-seconds. If no  action  occurred  on
              one  of  the  monitored file descriptions following the indicated amount of time, wait will return
              with nReady returning 0. The requested alarm time (sec+usec/1e+6) may not be negative and  may
              not  exceed  std::numeric_limits<int>::max()  or  an  FBB::Exception exception will be thrown. A 0
              alarm time specification results in wait returning immediately. To switch off the alarm  time  use
              noAlarm.

       o      intwait():
              This  member  should  be  called  to  wait  for  activities  on  the installed file descriptors or
              timeout-period. The members exceptFd,nReady,readFd and writeFd show their defined behaviors only
              after wait has returned.

              It throws an FBB::Exception exception when select(2) fails, which may very well indicate  the  end
              of any available input. An exception is also thrown if the program received a signal.

              If  wait  returns  normally  its return value represents the number of available file descriptors.
              Note that wait may also return with an input file descriptor returned by readFd of a file  at  its
              end-of-file  position.  The  file  is `ready for reading’, but no characters will be returned when
              trying to read from it due to its end-of-file status.

       o      intwriteFd():
              Returns -1 of no more file descriptors are available for writing.  Otherwise  the  next  available
              file  descriptor  for  writing  is  returned.  Returning  from  wait,  this function can be called
              repeatedly until -1 is returned, servicing each available filedescriptor in turn.

Name

       FBB::Selector - Timed delays, Alarms and Multiple File I/O.

Namespace

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

See Also

bobcat(7), select(2)

Synopsis

#include<bobcat/selector>
       Linking option: -lbobcat

See Also