⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileserver.cpp

📁 一个和TOP程序差不多功能的程序
💻 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 + -