资源简介
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用户模型
评论
共有 条评论