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

来源:互联网 发布:淘宝金冠店铺排名 编辑:程序博客网 时间:2024/06/11 20:12

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


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

test.c

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

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

  1. <span style="font-family:Microsoft YaHei;font-size:18px;">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$   
  10. </span>  

好像有点误差。


水平有限,如果有朋友发现错误,欢迎留言交流。
转载请保留本文链接,如果觉得我的文章能帮到您,请顶一下。,谢谢。