使用statvfs读取文件系统信息
2012-01-10 22:52
363 查看
http://wkt55555.blog.163.com/blog/static/445152592010880143286/
// statvfs.c
//
// Copyright 2010 wkt <weikting@gmail.com>
//
http://www.mkssoftware.com/docs/man5/struct_statvfs.5.asp
///文件操作偏移地址启用64位形式
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <sys/statvfs.h>
typedef enum {
TOTAL_SIZE,///文件系统的大小
FREE_SIZE, ///自由空间
USED_SIZE, ///已用空间
***AIL_SIZE ///用户实际可以使用的空间
}VFsize;
//把数字大小转换成字符形式
char *
byte_size_to_string(fsblkcnt_t size)
{
const double k = 1024;
const double m = k*1024;
const double g = m*k;
static char size_str[128] = {0};
if(size>=g)
sprintf(size_str,"%0.2lf GB",size/g);
else if(size>=m)
sprintf(size_str,"%0.2lf MB",size/m);
else if(size>=k)
sprintf(size_str,"%0.2lf KB",size/k);
else
sprintf(size_str,"%0.0lf Byte",size>=0?size:0.0);
return size_str;
}
///文件系统的各种信息数据的大小
fsblkcnt_t
get_vfs_size(struct statvfs *buf,VFsize flag)
{
fsblkcnt_t block;
fsblkcnt_t bsize;
bsize = buf->f_bsize;
switch (flag){
case TOTAL_SIZE:
block = buf->f_blocks;
break;
case FREE_SIZE:
block = buf->f_bfree;
break;
case USED_SIZE:
block = buf->f_blocks - buf->f_bavail;
break;
case ***AIL_SIZE:
block = buf->f_bavail;
break;
default:
block = 0;
break;
}
return bsize * block;
}
int main(int argc, char **argv)
{
char *pathname;
struct statvfs buf;
fsblkcnt_t total_size;
fsblkcnt_t used_size;
fsblkcnt_t avail_size;
int error;
pathname = "/";
if(argc>1){
pathname = argv[1];
}
//把文件系统信息读入 struct statvfs buf 中
error = statvfs(pathname,&buf);
//错误检查
if(error <0){
fprintf(stderr,"statvfs():%m\n");
return error;
}
//输出结果,此结果与gparted一致,与df出入较大
printf("FileSystem of \'%s\':\n",pathname);
total_size = get_vfs_size(&buf,TOTAL_SIZE);
printf(" total:%s\n",byte_size_to_string(total_size));
used_size = get_vfs_size(&buf,USED_SIZE);
printf(" used :%s\n",byte_size_to_string(used_size));
avail_size = get_vfs_size(&buf,***AIL_SIZE);
printf(" Avail:%s\n",byte_size_to_string(avail_size));
return 0;
}
// statvfs.c
//
// Copyright 2010 wkt <weikting@gmail.com>
//
http://www.mkssoftware.com/docs/man5/struct_statvfs.5.asp
///文件操作偏移地址启用64位形式
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <sys/statvfs.h>
typedef enum {
TOTAL_SIZE,///文件系统的大小
FREE_SIZE, ///自由空间
USED_SIZE, ///已用空间
***AIL_SIZE ///用户实际可以使用的空间
}VFsize;
//把数字大小转换成字符形式
char *
byte_size_to_string(fsblkcnt_t size)
{
const double k = 1024;
const double m = k*1024;
const double g = m*k;
static char size_str[128] = {0};
if(size>=g)
sprintf(size_str,"%0.2lf GB",size/g);
else if(size>=m)
sprintf(size_str,"%0.2lf MB",size/m);
else if(size>=k)
sprintf(size_str,"%0.2lf KB",size/k);
else
sprintf(size_str,"%0.0lf Byte",size>=0?size:0.0);
return size_str;
}
///文件系统的各种信息数据的大小
fsblkcnt_t
get_vfs_size(struct statvfs *buf,VFsize flag)
{
fsblkcnt_t block;
fsblkcnt_t bsize;
bsize = buf->f_bsize;
switch (flag){
case TOTAL_SIZE:
block = buf->f_blocks;
break;
case FREE_SIZE:
block = buf->f_bfree;
break;
case USED_SIZE:
block = buf->f_blocks - buf->f_bavail;
break;
case ***AIL_SIZE:
block = buf->f_bavail;
break;
default:
block = 0;
break;
}
return bsize * block;
}
int main(int argc, char **argv)
{
char *pathname;
struct statvfs buf;
fsblkcnt_t total_size;
fsblkcnt_t used_size;
fsblkcnt_t avail_size;
int error;
pathname = "/";
if(argc>1){
pathname = argv[1];
}
//把文件系统信息读入 struct statvfs buf 中
error = statvfs(pathname,&buf);
//错误检查
if(error <0){
fprintf(stderr,"statvfs():%m\n");
return error;
}
//输出结果,此结果与gparted一致,与df出入较大
printf("FileSystem of \'%s\':\n",pathname);
total_size = get_vfs_size(&buf,TOTAL_SIZE);
printf(" total:%s\n",byte_size_to_string(total_size));
used_size = get_vfs_size(&buf,USED_SIZE);
printf(" used :%s\n",byte_size_to_string(used_size));
avail_size = get_vfs_size(&buf,***AIL_SIZE);
printf(" Avail:%s\n",byte_size_to_string(avail_size));
return 0;
}
相关文章推荐
- 使用statvfs读取文件系统信息
- Linux 使用statvfs读取文件系统信息
- python os.statvfs() 查看文件系统信息 磁盘使用情况
- C下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!
- python下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!
- 使用命令行ls命令的Android文件浏览控件,适合于root过的设备,可以读取系统文件
- 在系统中使用read函数读取文件内容
- C#读取系统文件信息(一)——调API读取文件类型
- java IO 使用Properties设置键值对配置信息 写入文件和从文件中读取
- Web系统通过EXE文件实现读取客户电脑MAC等硬件信息且兼容非IE浏览器
- 在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
- linux stat系统调用,获取文件信息。
- 在使用servlet时读取database.properties数据库配置文件信息方法
- 使用Spring读取xml文件中的配置信息
- linux系统编程之文件与IO:stat()系统调用获取文件信息
- C# 使用app.config文件方法 读取外部配置信息
- 读取文件系统信息
- linux stat系统调用,获取文件信息。
- 使用Spring中Src下 -context.xml : 用资源文件夹保存数据库的链接信息 并在配置文件里读取
- Spring使用C3P0,从db.properties文件中读取信息,连接数据库