linux下C编程--利用statfs函数查看磁盘空间

http://blog.csdn.net/wzzfeitian/article/details/7825225

前两天工作有需求,需要查询一个路径的总空间大小和可用空间大小,结果就查到了这个函数,测试程序如下:

test.c

  1. #include <sys/statfs.h> 
  2. #include <stdio.h> 
  3.  
  4. int main() 
  5.     struct statfs diskInfo; 
  6.      
  7.     statfs("/home/carl/", &diskInfo); 
  8.     unsigned long long blocksize = diskInfo.f_bsize;    //每个block里包含的字节数 
  9.     unsigned long long totalsize = blocksize * diskInfo.f_blocks;   //总的字节数,f_blocks为block的数目 
  10.     printf("Total_size = %llu B = %llu KB = %llu MB = %llu GB\n",  
  11.         totalsize, totalsize>>10, totalsize>>20, totalsize>>30); 
  12.      
  13.     unsigned long long freeDisk = diskInfo.f_bfree * blocksize; //剩余空间的大小 
  14.     unsigned long long availableDisk = diskInfo.f_bavail * blocksize;   //可用空间大小 
  15.     printf("Disk_free = %llu MB = %llu GB\nDisk_available = %llu MB = %llu GB\n",  
  16.         freeDisk>>20, freeDisk>>30, availableDisk>>20, availableDisk>>30); 
  17.      
  18.     return 0; 
#include <sys/statfs.h>
#include <stdio.h>

int main()
{
	struct statfs diskInfo;
	
	statfs("/home/carl/", &diskInfo);
	unsigned long long blocksize = diskInfo.f_bsize;	//每个block里包含的字节数
	unsigned long long totalsize = blocksize * diskInfo.f_blocks; 	//总的字节数,f_blocks为block的数目
	printf("Total_size = %llu B = %llu KB = %llu MB = %llu GB\n", 
		totalsize, totalsize>>10, totalsize>>20, totalsize>>30);
	
	unsigned long long freeDisk = diskInfo.f_bfree * blocksize;	//剩余空间的大小
	unsigned long long availableDisk = diskInfo.f_bavail * blocksize; 	//可用空间大小
	printf("Disk_free = %llu MB = %llu GB\nDisk_available = %llu MB = %llu GB\n", 
		freeDisk>>20, freeDisk>>30, availableDisk>>20, availableDisk>>30);
	
	return 0;
}



 

编译过程,运行结果,与df命令对比结果如下:

  1. carl@carl-VirtualBox:~/share$ gcc test.c -o test_statfs 
  2. carl@carl-VirtualBox:~/share$ ./test_statfs  
  3. Total_size = 20332810240 B = 19856260 KB = 19390 MB = 18 GB 
  4. Disk_free = 15492 MB = 15 GB 
  5. Disk_available = 14519 MB = 14 GB 
  6. carl@carl-VirtualBox:~/share$ df /home/carl -h 
  7. Filesystem      Size  Used Avail Use% Mounted on 
  8. /dev/sda1        19G  3.9G   15G  22% / 
  9. carl@carl-VirtualBox:~/share$ 
carl@carl-VirtualBox:~/share$ gcc test.c -o test_statfs
carl@carl-VirtualBox:~/share$ ./test_statfs 
Total_size = 20332810240 B = 19856260 KB = 19390 MB = 18 GB
Disk_free = 15492 MB = 15 GB
Disk_available = 14519 MB = 14 GB
carl@carl-VirtualBox:~/share$ df /home/carl -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  3.9G   15G  22% /
carl@carl-VirtualBox:~/share$


好像有点误差。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值