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();
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盘大小及使用大小的更多相关文章
- Linux下获取硬盘使用情况
Linux下获取硬盘使用情况[总结] 1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场 ...
- linux下获取硬盘使用情况[总结]
1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...
- C#在Linux下获取文件夹信息(所在磁盘总大小,使用空间,已用空间,使用率)
1.第一种使用shell命令实现: private DiskInfo LinuxGetFolderDiskInfo(string path) { DiskInfo disk = new DiskInf ...
- linux下获取占用CPU资源最多的10个进程
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- Linux 下增大tomcat内存
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- Linux下获取arm的交叉编译工具链
转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...
- linux 下 取进程占用内存(MEM)最高的前10个进程
# linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...
随机推荐
- K2 BPM项目 基于COM组件调用SAP RFC 问题
K2 BPM项目 基于COM组件调用SAP RFC 问题 问题前景: 环境:Win 2008 R2 64bit 最近项目中有支流程需求中需要在会计入账环节回写SAP的会计凭证. SAP组给我们提供.N ...
- 谈谈.NET程序集(一)
谈谈.NET程序集(一) The Assembly in .NET by 唐小崇 http://www.cnblogs.com/tangchong 在.NET出现之前, Windows的程序有一些非常 ...
- Klockwork告警常见错误
下面列举的是Klockwork告警中常见的告警形式,这些情况在编译阶段都不会报出来语法上的错误,并且在运行阶段执行到的概率很小.但是在某些场景下一旦执行到了这些语句, 很可能引起进程的跑飞和挂起. ...
- Nginx学习之十四-GDB调试Nginx初试
本文的测试环境: Win7+虚拟机VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04 Nginx-1.4.0 要想有效的研究Nginx源码,必 ...
- 远程安装实施时,如何配置远程服务器的本地 yum 安装源
配置本地 yum 安装源 overview 1.使用 ftp 将OracleLinux-R5-U8-Server-x86_64-dvd.iso 上传到 /home 目录下.再使用 mount 命令挂载 ...
- jq向webApi提交post json数据
在页面想webApi post json数据的时候,发现webapi不能直接以json的方式接受数据(注:我是没有发现一个很好的方式来post json数据的);但是可以以数据结构的方式传递: 如下: ...
- Day1-python理论基础
一.python介绍 Python 的创始人为Guido van Rossum.Guido为了打发圣诞节的无趣,于1989年发明,在荷兰国家数学和计算机科学研究所设计出来的(作为ABC 语言的一种继 ...
- H3 BPM 跨平台表单发起详解
1.1 目的 为方便技术对接服务,实现流程业务的跨平台对接,给出指引和帮助文档. 2 跨平台以Java为例调用.NET BPM表单流程全过程 2.1 双方系统确定接口协议规则 通信协议:基于soap通 ...
- 以域管理账户连接到TFS或git时,设置IE允许Cookies
在 Windows 域环境中,每个项目组会创建一个项目管理账户,在和其他项目组进行数据交互时,只需要授予该项目管理账户相应的权限,方便了权限的管理.对于项目组管理账户:domain\admin,该域账 ...
- Caffe安装过程错误处理方法
1. 错误1: fatal error: caffe/proto/caffe.pb.h: No such file or directory 解决方法: You need to generate ca ...