zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    常见的http状态码
    浅谈!DOCTYPE声明的作用?严格模式与混杂模式的区别?
    异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”
    Ecmascript 6新特性
    关于数组去重的几种方法-------javascript描述
    关于字符串的一些操作
    写一个将字符串转成驼峰命名的方法
    js作用域之常见笔试题,运行结果题
    CSS3实现图片黑白滤镜居中,hover缩放遮罩的效果
    远程桌面与本地桌面实现文件传输
  • 原文地址:https://www.cnblogs.com/wanzaiyimeng/p/6056685.html
Copyright © 2011-2022 走看看