码迷,mamicode.com
首页 > 其他好文 > 详细

statfs函数说明

时间:2014-08-19 09:18:43      阅读:947      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   文件   数据   

函数:
    statfs

功能描述:
    查询文件系统相关的信息。

用法:
    #include <sys/vfs.h> /* 或者 <sys/statfs.h> */

    int statfs(const char *path, struct statfs *buf);

    int fstatfs(int fd, struct statfs *buf);

参数:
    path: 需要查询信息的文件系统的文件路径名。

    fd: 需要查询信息的文件系统的文件描述词

    buf:以下结构体指针变量,用于储存文件系统相关的信息

    struct statfs {

        long f_type; /* 文件系统类型 */

       long f_bsize; /* 经过优化的传输块大小 */

       long f_blocks; /* 文件系统数据块总数 */

       long f_bfree; /* 可用块数 */

       long f_bavail; /* 非超级用户可获取的块数 */

       long f_files; /* 文件结点总数 */

       long f_ffree; /* 可用文件结点数 */

       fsid_t f_fsid; /* 文件系统标识 */

        long f_namelen; /* 文件名的最大长度 */

    };

返回说明:
    成功执行时,返回0。失败返回-1,errno被设为以下的某个值

    EACCES: (statfs())文件或路径名中包含的目录不可访问

    EBADF : (fstatfs()) 文件描述词无效

    EFAULT: 内存地址无效

    EINTR : 操作由信号中断

    EIO : 读写出错

    ELOOP : (statfs())解释路径名过程中存在太多的符号连接

    ENAMETOOLONG:(statfs()) 路径名太长

    ENOENT:(statfs()) 文件不存在

    ENOMEM: 核心内存不足

    ENOSYS: 文件系统不支持调用

    ENOTDIR:(statfs())路径名中当作目录的组件并非目录

    EOVERFLOW:信息溢出

 

例子:

  1 //说明:pDisk 路径名 如“/home”
  2 
  3 int DH_GetDiskfreeSpacePercent(char *pDisk){
  4     long long freespace = 0;
  5     struct statfs disk_statfs;
  6     long long totalspace = 0;
  7     float freeSpacePercent = 0 ;
  8 
  9     if( statfs(pDisk, &disk_statfs) >= 0 ){
 10         freespace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_bfree)/(long long)1024);
 11         totalspace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_blocks) /(long long)1024);
 12     }
 13 
 14     freeSpacePercent = ((float)freespace/(float)totalspace)*100 ;
 15     return freeSpacePercent ; 
 16 }
 17 
 18 linux df命令实现:
 19 
 20 #include <stdio.h>
 21 #include <stdlib.h>
 22 #include <string.h>
 23 #include <errno.h>
 24 #include <sys/statfs.h>
 25 
 26 static int ok = EXIT_SUCCESS;
 27 
 28 static void printsize(long long n)
 29 {
 30     char unit = K;
 31     n /= 1024;
 32     if (n > 1024) {
 33        n /= 1024;
 34        unit = M;
 35     }
 36     if (n > 1024) {
 37        n /= 1024;
 38        unit = G;
 39     }
 40     printf("%4lld%c", n, unit);
 41 }
 42 
 43 static void df(char *s, int always) {
 44     struct statfs st;
 45 
 46     if (statfs(s, &st) < 0) {
 47         fprintf(stderr, "%s: %s\n", s, strerror(errno));
 48         ok = EXIT_FAILURE;
 49     } else {
 50         if (st.f_blocks == 0 && !always)
 51            return;
 52         printf("%-20s ", s);
 53         printf("%-20s ", s);
 54         printsize((long long)st.f_blocks * (long long)st.f_bsize);
 55         printf(" ");
 56         printsize((long long)(st.f_blocks - (long long)st.f_bfree) * st.f_bsize);
 57         printf(" ");
 58         printsize((long long)st.f_bfree * (long long)st.f_bsize);
 59         printf(" %d\n", (int) st.f_bsize);
 60     }
 61 }
 62 
 63 int main(int argc, char *argv[]) {
 64     printf("Filesystem Size Used Free Blksize\n");
 65     if (argc == 1) {
 66         char s[2000];
 67         FILE *f = fopen("/proc/mounts", "r");
 68 
 69         while (fgets(s, 2000, f)) {
 70             char *c, *e = s;
 71 
 72             for (c = s; *c; c++) {
 73                 if (*c ==  ) {
 74                     e = c + 1;
 75                     break;
 76                 }
 77             }
 78 
 79             for (c = e; *c; c++) {
 80                 if (*c ==  ) {
 81                     *c = \0;
 82                     break;
 83                 }
 84             }
 85 
 86             df(e, 0);
 87         }
 88 
 89         fclose(f);
 90     } else {
 91         printf(" NO argv\n");
 92         int i;
 93 
 94         for (i = 1; i < argc; i++) {
 95             df(argv[i], 1);
 96         }
 97     }
 98 
 99     exit(ok);
100 }

 

statfs函数说明,布布扣,bubuko.com

statfs函数说明

标签:style   blog   http   color   os   io   文件   数据   

原文地址:http://www.cnblogs.com/elisha-blogs/p/statfs.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!