|
SASC-NG
DVBSoftCAM
|
#include <tools.h>
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) |
| bool cFile::AnyFileReady | ( | int | FileDes = -1, |
| int | TimeoutMs = 1000 |
||
| ) | [static] |
Definition at line 746 of file tools.cpp.
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 | ) |
| 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] |
| 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 |
||
| ) |
| 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;
}
| bool cFile::Ready | ( | bool | Wait = true | ) |
Definition at line 741 of file tools.cpp.
References AnyFileReady().
{
return f >= 0 && AnyFileReady(f, Wait ? 1000 : 0);
}