linux下獲取硬盤、內存、U盤大小及使用大小


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM