SASC
DVBSoftCAM

cFile Class Reference

#include <tools.h>

List of all members.

Public Member Functions

 cFile (void)
 ~cFile ()
 operator int ()
bool Open (const char *FileName, int Flags, mode_t Mode=DEFFILEMODE)
bool Open (int FileDes)
void Close (void)
bool IsOpen (void)
bool Ready (bool Wait=true)

Static Public Member Functions

static bool AnyFileReady (int FileDes=-1, int TimeoutMs=1000)
static bool FileReady (int FileDes, int TimeoutMs=1000)
static bool FileReadyForWriting (int FileDes, int TimeoutMs=1000)

Detailed Description

Definition at line 287 of file tools.h.


Constructor & Destructor Documentation

cFile::cFile ( void  )

Definition at line 689 of file tools.cpp.

{
  f = -1;
}
cFile::~cFile ( )

Definition at line 694 of file tools.cpp.

References Close().

{
  Close();
}

Member Function Documentation

bool cFile::AnyFileReady ( int  FileDes = -1,
int  TimeoutMs = 1000 
) [static]

Definition at line 746 of file tools.cpp.

References i, and NULL.

Referenced by Ready().

{
  fd_set set;
  FD_ZERO(&set);
  for (int i = 0; i < maxFiles; i++) {
      if (files[i])
         FD_SET(i, &set);
      }
  if (0 <= FileDes && FileDes < FD_SETSIZE && !files[FileDes])
     FD_SET(FileDes, &set); // in case we come in with an arbitrary descriptor
  if (TimeoutMs == 0)
     TimeoutMs = 10; // load gets too heavy with 0
  struct timeval timeout;
  timeout.tv_sec  = TimeoutMs / 1000;
  timeout.tv_usec = (TimeoutMs % 1000) * 1000;
  return select(FD_SETSIZE, &set, NULL, NULL, &timeout) > 0 && (FileDes < 0 || FD_ISSET(FileDes, &set));
}
void cFile::Close ( void  )

Definition at line 732 of file tools.cpp.

Referenced by ~cFile().

{
  if (f >= 0) {
     close(f);
     files[f] = false;
     f = -1;
     }
}
bool cFile::FileReady ( int  FileDes,
int  TimeoutMs = 1000 
) [static]

Definition at line 764 of file tools.cpp.

References NULL.

{
  fd_set set;
  struct timeval timeout;
  FD_ZERO(&set);
  FD_SET(FileDes, &set);
  if (TimeoutMs >= 0) {
     if (TimeoutMs < 100)
        TimeoutMs = 100;
     timeout.tv_sec  = TimeoutMs / 1000;
     timeout.tv_usec = (TimeoutMs % 1000) * 1000;
     }
  return select(FD_SETSIZE, &set, NULL, NULL, (TimeoutMs >= 0) ? &timeout : NULL) > 0 && FD_ISSET(FileDes, &set);
}
bool cFile::FileReadyForWriting ( int  FileDes,
int  TimeoutMs = 1000 
) [static]

Definition at line 779 of file tools.cpp.

References NULL.

{
  fd_set set;
  struct timeval timeout;
  FD_ZERO(&set);
  FD_SET(FileDes, &set);
  if (TimeoutMs < 100)
     TimeoutMs = 100;
  timeout.tv_sec  = 0;
  timeout.tv_usec = TimeoutMs * 1000;
  return select(FD_SETSIZE, NULL, &set, NULL, &timeout) > 0 && FD_ISSET(FileDes, &set);
}
bool cFile::IsOpen ( void  ) [inline]

Definition at line 299 of file tools.h.

Referenced by cSVDRP::HasConnection(), and Open().

{ return f >= 0; }
bool cFile::Open ( const char *  FileName,
int  Flags,
mode_t  Mode = DEFFILEMODE 
)

Definition at line 699 of file tools.cpp.

References esyslog, IsOpen(), and open().

{
  if (!IsOpen())
     return Open(open(FileName, Flags, Mode));
  esyslog("ERROR: attempt to re-open %s", FileName);
  return false;
}
bool cFile::Open ( int  FileDes)

Definition at line 707 of file tools.cpp.

References esyslog, and IsOpen().

{
  if (FileDes >= 0) {
     if (!IsOpen()) {
        f = FileDes;
        if (f >= 0) {
           if (f < FD_SETSIZE) {
              if (f >= maxFiles)
                 maxFiles = f + 1;
              if (!files[f])
                 files[f] = true;
              else
                 esyslog("ERROR: file descriptor %d already in files[]", f);
              return true;
              }
           else
              esyslog("ERROR: file descriptor %d is larger than FD_SETSIZE (%d)", f, FD_SETSIZE);
           }
        }
     else
        esyslog("ERROR: attempt to re-open file descriptor %d", FileDes);
     }
  return false;
}
cFile::operator int ( ) [inline]

Definition at line 295 of file tools.h.

{ return f; }
bool cFile::Ready ( bool  Wait = true)

Definition at line 741 of file tools.cpp.

References AnyFileReady().

{
  return f >= 0 && AnyFileReady(f, Wait ? 1000 : 0);
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines