00001 #ifndef __XRDCnsLogFile_H_
00002 #define __XRDCnsLogFile_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "XrdCns/XrdCnsLogRec.hh"
00034 #include "XrdSys/XrdSysPthread.hh"
00035
00036 class XrdCnsLogFile
00037 {
00038 public:
00039
00040 XrdCnsLogFile *Next;
00041
00042 int Add(XrdCnsLogRec *Rec, int doSync=1);
00043
00044 int Commit();
00045
00046 int Eol();
00047
00048 const char *FName() {return logFN;}
00049
00050 char *getLog(int &Dlen) {Dlen = logNext-logBuff; return logBuff;}
00051
00052 XrdCnsLogRec *getRec();
00053
00054 static void maxRecs(int nRecs) {logRMax = nRecs;
00055 logBMax = nRecs * sizeof(XrdCnsLogRec);
00056 }
00057
00058 int Open(int aBuff=1, off_t thePos=0);
00059
00060 XrdCnsLogFile *Subscribe(const char *Path, int cNum);
00061
00062 int Unlink();
00063
00064 XrdCnsLogFile(const char *Path, int cnum=0, int Wait=1)
00065 : Next(0), logSem(0), subNext(0),
00066 logBuff(0),logNext(0), logFN(strdup(Path)),
00067 logFD(-1), logRdr(cnum), logWait(Wait),
00068 logOffset(0), recOffset(0) {}
00069 ~XrdCnsLogFile();
00070
00071 private:
00072 int Read(char *buff, int blen);
00073
00074 static int logRMax;
00075 static int logBMax;
00076
00077 XrdSysMutex logMutex;
00078 XrdSysSemaphore logSem;
00079 XrdSysSemaphore synSem;
00080 XrdCnsLogFile *subNext;
00081
00082 XrdCnsLogRec Rec;
00083
00084 char *logBuff;
00085 char *logNext;
00086
00087 char *logFN;
00088 int logFD;
00089 int logRdr;
00090 int logWait;
00091 int logOffset;
00092 int recOffset;
00093 };
00094 #endif