#include <sys/statfs.h>

     unsigned ;
     size_t mbFreedisk = ;
     unsigned ;
     size_t mbTotalsize = ;

     struct statfs diskInfo;

     statfs("/mnt/sdcard", &diskInfo);    

     freeDisk = (unsigned long long)(diskInfo.f_bfree) * (unsigned long long)(diskInfo.f_bsize);

     mbFreedisk = freeDisk >> ;

     totalDisk = (unsigned long long)(diskInfo.f_blocks) * (unsigned long long)(diskInfo.f_bsize);
     mbTotalsize = totalDisk >> ;    

     printf ("/mnt/sdcard  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);

     statfs("/cache", &diskInfo);

     freeDisk = (unsigned long long)(diskInfo.f_bfree) * (unsigned long long)(diskInfo.f_bsize);
     mbFreedisk = freeDisk >> ;

     totalDisk = (unsigned long long)(diskInfo.f_blocks) * (unsigned long long)(diskInfo.f_bsize);
     mbTotalsize = totalDisk >> ;

     printf ("/cache  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);
 
#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:信息溢出

linux df命令实现:

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 #include <sys/statfs.h>

 static int ok = EXIT_SUCCESS;

 static void printsize(long long n)
 {
     char unit = 'K';
     n /= ;
   )
     {
       n /= ;
       unit = 'M';
     }
   )
     {
       n /= ;
       unit = 'G';
     }
   printf("%4lld%c", n, unit);
 }

 static void df(char *s, int always)
 {
   struct statfs st;
     )
     {
         fprintf(stderr, "%s: %s\n", s, strerror(errno));
         ok = EXIT_FAILURE;
   }
     else
     {
          && !always)
         return;
         printf("%-20s ", s);
         printf("%-20s ", s);
         printsize((long long)st.f_blocks * (long long)st.f_bsize);
         printf(" ");
         printsize((long long)(st.f_blocks - (long long)st.f_bfree) * st.f_bsize);
         printf(" ");
         printsize((long long)st.f_bfree * (long long)st.f_bsize);
         printf(" %d\n", (int) st.f_bsize);
   }
 }

 int main(int argc, char *argv[])
 {
   printf("Filesystem Size Used Free Blksize\n");
   )
     {
         ];
         FILE *f = fopen("/proc/mounts", "r");
         , f))
         {
           char *c, *e = s;
             for (c = s; *c; c++)
             {
               if (*c == ' ')
                 {
                   e = c + ;
                   break;
               }
           }
             for (c = e; *c; c++)
             {
               if (*c == ' ')
                 {
                   *c = '\0';
                   break;
               }
           }

             df(e, );
       }

         fclose(f);
   }
     else
     {
       printf(" NO argv\n");
          int i;
         ; i < argc; i++)
         {
           df(argv[i], );
       }
   }

     exit(ok);
 }

linux下c语言实现计算磁盘剩余空间的更多相关文章

  1. Linux下查看磁盘剩余空间和文件夹大小

    1. du -sh 查看当前文件夹大小 2. du -sh * | sort -n 列出当前文件夹下的所有文件夹及其大小,并按照文件夹大小排序 du - sh *  //查看当前文件夹下所有文件的大小 ...

  2. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  3. 笔记整理——Linux下C语言正则表达式

    Linux下C语言正则表达式使用详解 - Google Chrome (2013/5/2 16:40:37) Linux下C语言正则表达式使用详解 2012年6月6日Neal627 views发表评论 ...

  4. Linux下C语言编程基础学习记录

    VIM的基本使用  LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...

  5. 20155322 2017-2018-1《信息安全系统设计》第二周 课堂测试 Linux下C语言实现MYOD

    20155322 2017-2018-1<信息安全系统设计>第二周 课堂测试 Linux下C语言实现MYOD [博客目录] 静态库测试 实现方法 相关资料 操作 动态库测试 实现方法 相关 ...

  6. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  7. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  8. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  9. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

随机推荐

  1. PowerShell并发控制-命令行参数之四问

    传教士问: win下如何 获取进程命令行,及命令行参数? 传教士答: 可以用这个powershell命令(实际上是wmi查询): (get-wmiobject -query "select ...

  2. JAVA学习1

    以前学过JAVA,但是长时间不用又给忘了,趁着还有时间回顾一下. 一切皆是对象.

  3. C语言中输入输出函数

    1.1.1 格式化输入输出函数Turbo C2.0 标准库提供了两个控制台格式化输入. 输出函数printf() 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据.pri ...

  4. object_c函数多个返回值

    - (void)readStr1:(NSString**)str1 andStr2:(NSString**)str2{    NSString *s1 = @"1";    NSS ...

  5. Shell获取当前用户

    id | sed -e 's/).*//g' -e 's/.*(//' 比$LOGNAME $NAME who am i都要准确一些

  6. linux下的文件权限管理

    权限管理有两个层面 第一层区分用户:文件属主(u), 组用户(g), 其它(o) 第二层区分权限:读(r),写(w),可执行(x) 这两个层次构成文件权限管理的二维结构 u         g     ...

  7. 无法为表空间 ***中的段创建 INITIAL 区

    这是由于表空间不足引起的. 具体错误: 解决方案:扩展表空间

  8. BZOJ 4011 落忆枫音

    几个重点: 1.从每个点任选一条入边,都可以成为一个树形图. 2.于是考虑所有答案减去有环的答案. 3.将要求的东西形式化表示出来,然后发现可以直接dp.. 好厉害啊.. #include<io ...

  9. 多个storyboard开发应用程序,封装.bundle和.a不用xib使用storyboard!!!

    一,封装.bundle和.a使用xib的方式前面已经说过了,具体方式不再赘述,简单介绍于下: 静态库加.h  bundle:删plist,改sdk,加xib 简称psx三步 引用库的项目,加.a .b ...

  10. UILocalNotification详解

    以下内容来自网络 本地Notification所使用的对象是UILocalNotification,UILocalNotification的属性涵盖了所有处理Notification需要的内容.UIL ...