函数:
    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:信息溢出

例子:

 //说明:pDisk 路径名 如“/home”

 int DH_GetDiskfreeSpacePercent(char *pDisk){
long long freespace = ;
struct statfs disk_statfs;
long long totalspace = ;
float freeSpacePercent = ; if( statfs(pDisk, &disk_statfs) >= ){
freespace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_bfree)/(long long));
totalspace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_blocks) /(long long));
} freeSpacePercent = ((float)freespace/(float)totalspace)* ;
return freeSpacePercent ;
} 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 /= ;
if (n > ) {
n /= ;
unit = 'M';
}
if (n > ) {
n /= ;
unit = 'G';
}
printf("%4lld%c", n, unit);
} static void df(char *s, int always) {
struct statfs st; if (statfs(s, &st) < ) {
fprintf(stderr, "%s: %s\n", s, strerror(errno));
ok = EXIT_FAILURE;
} else {
if (st.f_blocks == && !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");
if (argc == ) {
char s[];
FILE *f = fopen("/proc/mounts", "r"); while (fgets(s, , 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; for (i = ; i < argc; i++) {
df(argv[i], );
96 }
97 } exit(ok);
}

statfs函数说明的更多相关文章

  1. C/C++ 获取文件大小

    在C语言中测试文件的大小,主要使用二个标准函数. 1.fseek 函数原型:int fseek ( FILE * stream, long int offset, int origin ); 参数说明 ...

  2. 添砖加瓦:Linux系统监测

    前言 前段时间因为项目需求,需要实时获取系统当前的运行状态,遂查阅了不少资料,基于/proc目录下的部分文件,实现了系统CPU.内存.网络和磁盘的实时监测. 一.CPU使用情况获取 获取CPU使用情况 ...

  3. 鸿蒙轻内核M核源码分析:LibC实现之Musl LibC

    摘要:本文学习了LiteOS-M内核Musl LibC的实现,特别是文件系统和内存分配释放部分. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十九 Musl LibC>,作者:zhus ...

  4. 【转】linux C++ 获取文件信息 stat函数详解

    stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat ...

  5. stat 函数讲解

    表头文件:    #include <sys/stat.h>                     #include <unistd.h>定义函数:    int stat( ...

  6. 节点地址的函数list_entry()原理详解

    本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...

  7. C stat函数的用法举例(转载)

    stat函数讲解表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat( ...

  8. linux常见系统调用函数列表

    以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完 ...

  9. Linux常用系统函数

    Linux常用系统函数 一.进程控制 fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程 ...

随机推荐

  1. Delphi 调用系统中的计算器、记事本、画图软件方法

    1.直接调用    前面uses加 ShellAPI ShellExecute(Handle, 'open', PChar('calc.exe'), nil, nil, SW_SHOW); 2.直接调 ...

  2. 《Unix环境高级编程》环境搭建

    用的是第三版的安装包:src.3e.tar.gz 地址:http://www.apuebook.com/ 1.解压:$ tar  -zxvf  *.tar.gz 2. $ cd apue.3e/ 3. ...

  3. poj1011 Sticks(dfs+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 110416   Accepted: 25331 Descrip ...

  4. 马士兵 Servlet_JSP(3) Servlet和JSP的通信(源代码)

    (1)从JSP调用Servlet可用<jsp:forward>,请求信息自动转到Servlet FromJspToServlet.jsp <html>     <body ...

  5. hdu 5685 Problem A

    Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串.现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串 ...

  6. maven install 报错Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin

    Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of ...

  7. web前端代码规范——css代码规范

    Bootstrap CSS编码规范 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 为选择器分组时,将单独的选择器单独放在一行. 为了代码的易读性,在每个 ...

  8. SSH 服务启动时出现如下错误:fatal: Cannot bind any address

    注意:本文相关配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 云服务器 ECS (Elast ...

  9. 将excel的.xlsx文件转成数据库文件.db的方法

    1.下载好工具SQLite Expert Professional 3 ,晚上有很多,自行百度. 2.打开.xls文件,将文件另存为.csv文件.说明一下: 可以将xls文件看作是数据库里的一个表.所 ...

  10. gridView 布局间距合理化的有效办法

    网上有很多人闻到过这个问题,给出好多办法,多数人并不是意见提的不对,而是没有抓住问题的本质 . 因为我要做一个girdView的demo实例,遇到了这个问题 与大家一起分享,如果有想要demo的请给我 ...