📄 fileserver.cpp
字号:
#include <sys/vfs.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <unistd.h>
#include "FileServer.hpp"
#include <pthread.h>
unsigned long CreateThread(
void *lpThreadAttributes, // pointer to security attributes
unsigned long dwStackSize, // initial thread stack size
void *(*lpStartAddress)(void *),// pointer to thread function
void *lpParameter, // argument for new thread
unsigned long dwCreationFlags, // creation flags
unsigned long *lpThreadId // pointer to receive thread ID
)
{
pthread_t tid;
if (! lpThreadId)
{
lpThreadId = &tid;
}
return pthread_create(lpThreadId ,NULL, lpStartAddress, lpParameter);
}
int Exit;
void * Thread(void *lpvoid)
{
FileServer *lp=(FileServer*)lpvoid;
lp->Run();
return lpvoid;
}
void sig_term(int sigcount)
{
Exit=1;
}
FileServer::FileServer(char *FileName)
{
signal(SIGTERM, sig_term);
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, sig_term);
signal(SIGQUIT, sig_term);
Cfg.SetFileName(FileName);
Cfg.ReadFileConfig();
CreateThread(0,0,Thread,this,0,0);
}
FileServer::~FileServer()
{
}
/*
double FileServer::GetDiskInfo(char * Path)
{
if(!Path)
{
Path=Cfg.FilePath;
}
char *lpBuf=strtok(Path,";");
unsigned long Free=0,Total=0;
struct statfs sfs;
while(lpBuf)
{
int r=statfs(lpBuf, &sfs);
if(0==r)
{
Free+=sfs.f_blocks- sfs.f_bfree;//sfs.f_blocks-sfs.f_bavail;//sfs.f_blocks- sfs.f_bfree;
Total+=sfs.f_blocks;
}
lpBuf=strtok(0,";");
}
return ((double)Free)/(Total);
}
*/
int FileServer::WriteRealtimeStatus()
{
RealTimeStatus TimeStatus;
memset(&TimeStatus,0,sizeof(RealTimeStatus));
TimeStatus.NEavailability=1;
memcpy(TimeStatus.UpdateTime,GetCurrTime(),sizeof(TimeStatus.UpdateTime));
memcpy(TimeStatus.NEname,Cfg.NeName,sizeof(Cfg.NeName));//strlen(Cfg.NeName)+1);
TimeStatus.NEid=Cfg.NeID;
TimeStatus.NEram=(float)Info.MemInfo()/100;//内存空间使用率
TimeStatus.NEhd=(float)Info.GetDiskInfo(Cfg.FilePath)/100;//硬盘空间使用率
TimeStatus.NEcpu=(float)Info.PercentCPU()/100;//CPU使用率
return::WriteRealtimeStatus(&TimeStatus);
}
char * FileServer::GetCurrTime()
{
static char Time[30];
long tm=time(0);
struct tm *p=localtime(&tm);
sprintf(Time,"%04d-%02d-%02d %02d:%02d:%02d",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
return Time;
}
void FileServer::Run()
{
int id;
while(!Exit)
{
id=connectDb("sa","",Cfg.DbName);
while(!Exit&&!WriteRealtimeStatus())
{
CommitWork();
sleep(Cfg.InterVal);
}
printf("%s:%s\n",Cfg.NeName,getLastError());
disconnectDb(id);
sleep(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -