資源簡介
C++ 數據采集C++ 數據采集C++ 數據采集C++ 數據采集C++ 數據采集C++ 數據采集C++ 數據采集C++ 數據采集

代碼片段和文件信息
#include?“logreader.h“
#include?“dmsexception.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include
#include//bzero使用
#include
#include
//構造函數
LogReader::LogReader()
{
char?file[]=“logins.dat“;
bzero(loginsfile255);//memset()?
memcpy(loginsfilefilestrlen(file));
}
//日志讀取的主函數
void?LogReader::readLogs(list?*logs)
{
char?backfile[255];
bzero(backfile255);
try{
backup(backfile);
list?logins;
cout<<“讀取上次剩余登入記錄......“< readLogins(&logins);
cout<<“上次剩余數:“< list?logouts;
cout<<“讀取系統日志......“< readLogFile(backfile&logins&logouts);
cout<<“登入記錄數:“< cout<<“匹配登入/登出數據中......“< match(&logins&logoutslogs);
cout<<“匹配剩余登入記錄數:“<size()< cout<<“保存剩余登入數據......“< saveLogins(&logins);
}
catch(DMSException?e)
{
throw;
}
}
//設置采集的日志文件
void?LogReader::setLogfile(char?*file)
{
memcpy(logfilefilestrlen(file));
}
//剩余登入記錄的保存文件名
void?LogReader::setLoginsfile(char?*file)
{
memcpy(loginsfilefilestrlen(file));
}
//備份日志文件
void?LogReader::backup(char*backfile)
{
//備份文件名?dmsyyyymmdd
//得到系統時間
time_t?t=time(NULL);?
struct?tm*?st=localtime(&t);
sprintf(backfile“dms%04d%02d%02d%02d%02d“st->tm_year+1900st->tm_mon+1st->tm_mdayst->tm_hourst->tm_min);
string?backcmd(“./backup.sh?“);
backcmd+=“?wtmpx?“;
backcmd+=backfile;
backcmd+=“??2>/dev/null“;
int?re=system(backcmd.data());
if(re!=0)
{
throw??DMSException(“備份指令錯誤!“);?
}
}
//讀取上次匹配剩余的登入記錄
void?LogReader::readLogins(list?*logins)
{
//打開剩余的登入記錄文件。
int?fd=open(loginsfileO_RDONLY|O_EXCL);
if(fd==-1)
{
//文件不存在等原因
return;//不做任何處理
}
while(1)//循環讀取記錄
{
logrec?log;
int?re=read(fd&logsizeof(log));
if(re<=0)
{
//0?表示讀取完畢?其他表示異常
close(fd);
return;//結束處理
}
logins->push_back(log);
}
}
//讀取日志文件
void?LogReader::readLogFile(char*backfilelist*loginslist*logouts)
{
int?fd=open(backfileO_RDONLY|O_EXCL);
if(fd==-1)
{
throw??DMSException(“打開文件錯誤!“);?
}
while(1)
{
logrec?logs={};
short?type;
bzero(logs.logname32);
int?re=read(fdlogs.logname32);
if(re<=0)//根據條件跳出循環?
{
break;
}
lseek(fd36SEEK_CUR);
re=read(fd&logs.pidsizeof(pid_t));
logs.pid=ntohl(logs.pid);
re=read(fd&type2);
//處理字節序
/*由于我們實驗下的系統是Linux,
實際的日志文件是Unix,采用不同的字節序所以作一個轉換*/
type=ntohs(type);
lseek(fd6SEEK_CUR);
re=read(fd&logs.logtime4);
logs.logtime=ntohl(logs.logtime);
lseek(fd28SEEK_CUR);
short?size;
re=read(fd&size2);
size=ntohs(size);
bzero(logs.logip257);
re=read(fdlogs.logip257);
logs.logip[size]=0;
if(logs.logname[0]!=‘.‘)
{
if(type==7)
{
/*
cout< cout<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????114??2009-06-05?09:20??C++?數據采集\client\backup.sh
?????文件????????286??2011-05-18?01:29??C++?數據采集\client\data.h
?????文件??????41977??2011-06-15?13:35??C++?數據采集\client\dms
?????文件????????223??2009-06-05?09:20??C++?數據采集\client\dmsexception.h
?????文件??????17100??2011-06-15?13:37??C++?數據采集\client\logins.dat
?????文件???????4774??2011-07-14?11:41??C++?數據采集\client\logreader.cpp
?????文件????????710??2011-07-14?10:42??C++?數據采集\client\logreader.h
?????文件???????2949??2011-07-14?11:26??C++?數據采集\client\logsender.cpp
?????文件????????756??2011-07-14?10:55??C++?數據采集\client\logsender.h
?????文件????????907??2009-06-05?09:20??C++?數據采集\client\main.cpp
?????文件????????202??2011-05-18?01:22??C++?數據采集\client\Makefile
?????文件???12477996??2009-06-05?09:20??C++?數據采集\client\wtmpx
?????文件??????27136??2010-12-03?16:03??C++?數據采集\dmsserver.doc
?????文件???????1234??2011-06-15?13:34??C++?數據采集\server\clientaccepter.cpp
?????文件????????332??2009-06-05?09:20??C++?數據采集\server\clientaccepter.h
?????文件???????1907??2009-06-05?09:20??C++?數據采集\server\clientrecver.cpp
?????文件????????610??2009-06-05?09:20??C++?數據采集\server\clientrecver.h
?????文件????????349??2009-06-05?09:20??C++?數據采集\server\data.h
?????文件????????218??2009-06-05?09:20??C++?數據采集\server\dmsdao.cpp
?????文件????????131??2009-06-05?09:20??C++?數據采集\server\dmsdao.h
?????文件????????244??2009-06-05?09:20??C++?數據采集\server\dmsexception.h
?????文件??????20056??2011-06-15?13:36??C++?數據采集\server\dmsserver
?????文件???????1309??2011-06-15?13:36??C++?數據采集\server\dmsserver.cpp
?????文件????????296??2009-06-05?09:20??C++?數據采集\server\dmsserver.h
?????文件????????115??2009-06-05?09:20??C++?數據采集\server\idao.h
?????文件????????278??2009-06-05?09:20??C++?數據采集\server\Makefile
?????文件?????109835??2011-06-22?13:35??C++?數據采集\wtmpx.jpg
?????文件??????41472??2010-07-06?16:27??C++?數據采集\項目文檔.doc
?????目錄??????????0??2012-07-03?23:04??C++?數據采集\client
?????目錄??????????0??2012-07-03?23:04??C++?數據采集\server
............此處省略4個文件信息
- 上一篇:算術編碼,C語言實現
- 下一篇:aspen用戶模型
評論
共有 條評論