因为要读取SD卡的大小和使用情况,所以用到statfs这个函数,功能类似于df命令。

需要的头文件:#include <sys/vfs.h>

int statfs(const char *path, struct statfs *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:信息溢出

上代码例子:

#include <sys/vfs.h>
#include <stdio.h>int main()
{struct statfs diskInfo;//statfs("/media/card",&diskInfo);statfs("/dev",&diskInfo);unsigned long long blocksize = diskInfo.f_bsize;// 每个block里面包含的字节数unsigned long long totalsize = blocksize*diskInfo.f_blocks;//总的字节数char totalsize_GB[10]={0};printf("TOTAL_SIZE == %llu KB  %llu MB  %llu GB\n",totalsize>>10,totalsize>>20,totalsize>>30); // 分别换成KB,MB,GB为单位sprintf(totalsize_GB,"%.2f",(float)(totalsize>>20)/1024);printf("totalsize_GB=%s\n",totalsize_GB);unsigned long long freesize = blocksize*diskInfo.f_bfree; //再计算下剩余的空间大小printf("DISK_FREE == %llu KB  %llu MB  %llu GB\n",freesize>>10,freesize>>20,freesize>>30);unsigned long long usedsize = blocksize*(diskInfo.f_blocks - diskInfo.f_bfree);char usedsize_GB[10]={0};sprintf(usedsize_GB,"%.2f",(float)(usedsize>>20)/1024);printf("usedsize_GB=%s\n",usedsize_GB);return 0;
}

打印结果:

TOTAL_SIZE == 4079928 KB  3984 MB  3 GB
    totalsize_GB=3.89
    DISK_FREE == 4079924 KB  3984 MB  3 GB
    usedsize_GB=0.00

df命令:

udev                   4079928         4   4079924   1% /dev

可见结果是一致的。

代码里有几点有意思,换算成MB、GB是通过移位完成的。

但如果用GB为单位,需要保留两位小数呢?当 %.f2  格式即可,如果要传递这个数据,最好是用sprintf把小数格式成字符串更好吧。

已用的空间=总大小—剩余大小

statfs结构体和函数详解——例程相关推荐

  1. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  2. C++中的结构体vector排序详解

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  3. C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt

    c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...

  4. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  5. Linux C Socket编程发送结构体、文件详解及实例

    利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...

  6. 32.【C/C++ 结构体全类型 (详解)】

    C结构体的应用 (一).什么是结构体? (二).结构体的声明: 2.1介绍一下上面的结构体声明: 2.2struct声明的位置 2.3标记名的可省略性 (三).结构体变量的定义 3.1分配空间 3.2 ...

  7. 结构体和联合体详解-定义及初始化

    文章目录 前言 一.结构体 1.1结构体类型 1.2定义结构体变量 1.3 初始化结构体变量 1.4结构体变量的引用 二.结构体数组 2.1定义结构体数组 2.2初始化结构体数组 三.联合体 3.1初 ...

  8. C/C++结构体字节对齐详解

    结构体的sizeof 先看一个结构体: struct S1 {     char c;     int i; }; sizeof(S1)在VC6中按默认设置得到的结果为8. 我们先看看sizeof的定 ...

  9. c语言实现结构体变量private,C语言中结构体变量私有化详解

    背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate ...

最新文章

  1. 阿里云 rds 在windows 里面恢复
  2. aix cpu java_AIX cpu理解
  3. 线程与消息循环的关系
  4. 基于MTD的NAND驱动开发(二)
  5. 利用ASP .NET Core的静态文件原理实现远程访问Nlog日志内容及解决遇到的坑
  6. 枚举函数enumerate
  7. 95-150-015-源码-Sink-SinkFunction
  8. OSPF LSA详解
  9. 由WPS 2005想到的
  10. Chapter 3 Raster Images
  11. STM32自带GB2312字库显示汉字
  12. Java学习lesson 10
  13. 二维图画法入门_手绘的基础(入门)
  14. 基于BB方案,荣耀观影眼镜Vision Glass正式发布
  15. glutSwapBuffers()和glFlush()区别
  16. redis学习——redis事务
  17. SqlServer 对数据库文件进行增删改查
  18. htcvr设备计算机配置,【HTC-VIVE】02-设备的安装与配置(上)
  19. linux可以识别多少lun,Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)
  20. ISIS-ISIS高级特性—05

热门文章

  1. linux ppp用户管理,linux下ppp拨号上网
  2. 程序员们为什么不能“面朝大海,春暖花开?”
  3. go ip过滤_智慧识别“GOIP”呼转 罪犯无所遁形
  4. 定义一个抽象类一水果,创建若干水果对象存放在-一个水果类型的数组中,输出数组中所有水果的类型、重量
  5. 开学之际被Turkey问候,只能祭出正则大法
  6. 第三方登陆——QQ登陆详解
  7. 推荐一些免费的网盘给你
  8. Intel.VTune.Performance.Analyzer.v8.0.014.ISO下载
  9. python药店销售数据分析_Python数据分析实例一:医院药品销售数据
  10. 双天线和差测角matlab / FPGA开发