/*
* 获取硬盘大小;内存大小;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();
strcpy(path, "/media/");
strcat(path, pwd->pw_name); // ./media/root //初始化
pathUsb = new char(); //长度够不够? ent = new dirent; //数据
MBsize = 1024.0*1024.0; //最终结果只留下两位
totalDiskSize=;
usedDiskSize=;
totalMemSize=;
usedMemSize=;
totalUsbSize=;
usedUsbSize=;
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==){ //属于文件夹
if(strcmp(ent->d_name,".")== || strcmp(ent->d_name,"..")==)
{
usbExist = false;
totalUsbSize = ;
usedUsbSize = ;
}
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;
}

linux下获取硬盘、内存、U盘大小及使用大小的更多相关文章

  1. Linux下获取硬盘使用情况

    Linux下获取硬盘使用情况[总结] 1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场 ...

  2. linux下获取硬盘使用情况[总结]

    1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...

  3. C#在Linux下获取文件夹信息(所在磁盘总大小,使用空间,已用空间,使用率)

    1.第一种使用shell命令实现: private DiskInfo LinuxGetFolderDiskInfo(string path) { DiskInfo disk = new DiskInf ...

  4. linux下获取占用CPU资源最多的10个进程

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  5. linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  6. [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具

    linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...

  7. Linux 下增大tomcat内存

    我的服务器的配置: # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...

  8. Linux下获取arm的交叉编译工具链

    转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...

  9. linux 下 取进程占用内存(MEM)最高的前10个进程

    # linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

随机推荐

  1. 微信移动端web页面调试小技巧

    技术贴还是分享出来更加好,希望能对一些朋友有帮助,个人博客  http://lizhug.com/mymajor/微信移动端web页面调试小技巧

  2. android jni——helloworld

    看了网上好多牛人写的学习系列都是用HelloWorld作为开始,我们这里也用HelloWorld来开始我们的学习,首先我们来介绍下JNI吧. JNI作为java代码和C/C++的桥梁而存在的,为了让j ...

  3. 高反差保留滤镜学习OpenCV:滤镜系列(11)——高反差保留

    这几周笔者几篇文章介绍了改高反差保留滤镜的文章. 关联文章的地址 高反差保留就是高通滤波 r=(pix[x,y]-avg(R))/128 pix[x,y]*r+128*(1-r) #include & ...

  4. 玩转docker镜像和镜像构建

    摘要 本文从个人的角度,讲述对于docker镜像和镜像构建的一些实践经验.主要内容包括利用docker hub进行在线编译,下载镜像,dind的实践,对于镜像的一些思考等.本文是对当时微信分享内容的一 ...

  5. HTML target 属性

    定义和用法 <a> 标签的 target 属性规定在何处打开链接文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性 ...

  6. [HMLY]8.Cocoa

    cocoa是苹果公司为mac os x所创建的原声面向对象API,是mac os x上五大API之一,其他四个是carbon,posiX,x11,java. 苹果的面向对象开发框架,用来生成 Mac ...

  7. 0-ajax操作json(番外篇)

    [可以先看后边再看此文] get获取json 前端代码 <!DOCTYPE html> <html> <head> <meta charset="u ...

  8. 将List 中的ConvertAll的使用:List 中的元素转换,List模型转换, list模型转数组

    一,直接入代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...

  9. GC(垃圾回收)

    Java程序的内存分配和回收都是由JRE在后台自动进行的.JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收GC.通常JRE会提供一条超级线程来进行检测和控制,一般都是在CPU空闲或内存不足时 ...

  10. 跨线程传递栈变量带来异常指针Crash

    在手Q动漫的一份古老的代码中,现网发现少数crash,错误代码示例: char str[100] = "hello"; dispatch_async(dispatch_get_ma ...