Linux c获取任意路径的硬盘使用情况

时间:2024-06-21 16:33:44

没有什么好说的,其实就是获取硬盘的statfs信息结构

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/statfs.h>
#include <sys/vfs.h>
#include <string.h>
#include <errno.h> #define DEFAULT_DISK_PATH "/home" typedef struct statfs DISK,*pDISK; //获取包含磁盘空间信息的结构体
//参数二:要获取磁盘信息的位置
//返回值:成功返回1,失败返回0
int getDiskInfo(pDISK diskInfo,const char *path)
{
char dpath[]=DEFAULT_DISK_PATH;//设置默认位置
int flag=; if(NULL!=path)
{
strcpy(dpath,path);
} if(-==(flag=statfs(dpath,diskInfo)))//获取包含磁盘空间信息的结构体
{
perror("getDiskInfo statfs fail");
return ;
} return ;
} //计算磁盘总空间,非超级用户可用空间,磁盘所有剩余空间,计算结果以字符串的形式存储到三个字符串里面,单位为MB
int calDiskInfo(char *diskTotal,char *diskAvail,char *diskFree,pDISK diskInfo)
{
unsigned long long total=,avail=,free=,blockSize=;
int flag=; if(!diskTotal&&diskAvail&&diskFree&&diskInfo)
{
printf("\ncalDiskInfo param null!\n");
return ;
}
blockSize=diskInfo->f_bsize;//每块包含字节大小
total=diskInfo->f_blocks*blockSize;//磁盘总空间
avail=diskInfo->f_bavail*blockSize;//非超级用户可用空间
free=diskInfo->f_bfree*blockSize;//磁盘所有剩余空间 //字符串转换
flag=sprintf(diskTotal,"%llu",total>>);
flag=sprintf(diskAvail,"%llu",avail>>);
flag=sprintf(diskFree,"%llu",free>>); if(-==flag)
{
return ;
}
return ; } int main()
{
DISK diskInfo;
char str1[],str2[],str3[]; memset(&diskInfo,,sizeof(DISK)); getDiskInfo(&diskInfo,DEFAULT_DISK_PATH);//获取磁盘信息结构体 calDiskInfo(str1,str2,str3,&diskInfo);//计算磁盘信息结构体 printf("\ntotal:%s avail:%s free%s\n",str1,str2,str3);
printf("Hello world!\n");
return ;
}

运行结果如下,结果单位为MB

Linux c获取任意路径的硬盘使用情况

使用df命令获取的磁盘信息

Linux c获取任意路径的硬盘使用情况

可见,结果是差不多的。