/* * 獲取硬盤大小;內存大小;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; }
