/*
* 获取硬盘大小;内存大小;usb大小
*/
#ifndef SYSINFOGET_H
#define SYSINFOGET_H
#include <stdio.h>
//磁盘信息
#include <sys/statfs.h>
#include <sys/vfs.h>
#include <errno.h>
//内存信息
#include <sys/sysinfo.h>
#include <unistd.h>
#include <sys/time.h>
//系统账号信息
#include <pwd.h>
//文件信息
#include <dirent.h>
#include <sys/stat.h>
#include <QDebug>
class SysInfoGet
{
public:
SysInfoGet();
/**
* @brief getSysInfoInit 初始化数据
*/
void getSysInfoInit();
/**
* @brief getSysInfo 获取数据
*/
void getSysInfo();
double MBsize; //计算MB用
char *path;
char *pathUsb;
struct statfs diskInfo; //系统分区磁盘大小
struct sysinfo memInfo; //内存信息
struct statfs diskInfo2; //usb分区磁盘大小
struct dirent *ent;
public:
/**
* @brief totalDiskSize 磁盘大小
*/
double totalDiskSize;
/**
* @brief usedDiskSize 已用磁盘大小
*/
double usedDiskSize;
/**
* @brief totalMemSize 内存大小
*/
double totalMemSize;
/**
* @brief usedMemSize 已用内存
*/
double usedMemSize;
/**
* @brief totalUsbSize usb大小
*/
double totalUsbSize;
/**
* @brief usedUsbSize usb已用大小
*/
double usedUsbSize;
/**
* @brief usbExist usb是否存在
*/
bool usbExist;
};
#endif // SYSINFOGET_H
#include "sysinfoget.h"
SysInfoGet::SysInfoGet()
{
getSysInfoInit(); //初始化
//getSysInfo(); //获取
}
void SysInfoGet::getSysInfoInit(){
//初始化usb加载地址
struct passwd *pwd = new passwd;
pwd = getpwuid(getuid());
path = new char(15);
strcpy(path, "/media/");
strcat(path, pwd->pw_name); // ./media/root
//初始化
pathUsb = new char(25); //长度够不够?
ent = new dirent;
//数据
MBsize = 1024.0*1024.0; //最终结果只留下两位
totalDiskSize=0;
usedDiskSize=0;
totalMemSize=0;
usedMemSize=0;
totalUsbSize=0;
usedUsbSize=0;
usbExist=false;
}
void SysInfoGet::getSysInfo()
{
//--------磁盘信息测试---------------------------
//struct statfs diskInfo;
statfs("/", &diskInfo);
totalDiskSize = (double)(diskInfo.f_bsize*diskInfo.f_blocks)/MBsize;
usedDiskSize = (double)(diskInfo.f_bsize*diskInfo.f_blocks-diskInfo.f_bsize*diskInfo.f_bfree)/MBsize;
//qDebug()<<"total:"<<totalDiskSize<<"MB";
//qDebug()<<"used :"<<usedDiskSize<<"MB";
//---------内存信息测试----------------------------
//struct sysinfo memInfo;
sysinfo(&memInfo);
totalMemSize = (double)memInfo.totalram/MBsize;
usedMemSize = (double)(memInfo.totalram-memInfo.freeram)/MBsize;
//qDebug()<<"totalRAM:"<<totalMemSize<<"MB";
//qDebug()<<"used RAM:"<<usedMemSize<<"MB";
//---------U盘信息测试------------------------------
DIR *pDir = opendir(path);
// int existFlag;
// existFlag = 0;
// while(NULL != (ent=readdir(pDir)) )
// {
// if(ent->d_type==4)//if(ent->d_type & DT_DIR)
// {
// if(strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0) continue;
// //qDebug()<<ent->d_name;//u盘文件夹名称
// strcpy(pathUsb, path);
// strcat(pathUsb, "/");
// strcat(pathUsb, ent->d_name);
// //qDebug()<<pathUsb;//u盘文件夹地址
// struct statfs diskInfo2;
// statfs(pathUsb, &diskInfo2);
// totalUsbSize = (double)(diskInfo2.f_bsize*diskInfo2.f_blocks)/MBsize;
// usedUsbSize = (double)(diskInfo2.f_bsize*diskInfo2.f_blocks-diskInfo2.f_bsize*diskInfo2.f_bfree)/MBsize;
// existFlag=1;
// //qDebug()<<"totalUSB :"<<totalUsbSize<<"MB";
// //qDebug()<<"used USB :"<<usedUsbSize<<"MB";
// }
// }
// closedir(pDir);//必须关闭
// if(existFlag == 1){
// usbExist = true;
// }
// else{
// usbExist = false;
// }
//此获取的是最新插入的那个usb(一个)
ent=readdir(pDir); //UUI1;UUI;..;.
//qDebug()<<"test "<<ent->d_name;
if(ent->d_type==4){ //属于文件夹
if(strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0)
{
usbExist = false;
totalUsbSize = 0;
usedUsbSize = 0;
}
else
{
strcpy(pathUsb, path);
strcat(pathUsb, "/");
strcat(pathUsb, ent->d_name); //获取u盘地址
//struct statfs diskInfo2;
statfs(pathUsb, &diskInfo2);
usbExist = true;
totalUsbSize = (double)(diskInfo2.f_bsize*diskInfo2.f_blocks)/MBsize;
usedUsbSize = (double)(diskInfo2.f_bsize*diskInfo2.f_blocks-diskInfo2.f_bsize*diskInfo2.f_bfree)/MBsize;
//qDebug()<<"totalUSB :"<<totalUsbSize<<"MB";
//qDebug()<<"used USB :"<<usedUsbSize<<"MB";
}
}
closedir(pDir); //必须关闭
//qDebug()<<"USB :"<<usbExist;
}