1.功能描述编辑
查询文件系统相关的信息。
2.用法
#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
3.参数
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;
};
4.返回说明
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EACCES: (statfs())文件或路径名中包含的目录不可访问
EBADF : (fstatfs()) 文件描述词无效
EFAULT: 内存地址无效
EINTR : 操作由信号中断
EIO : 读写出错
ELOOP : (statfs())解释路径名过程中存在太多的符号连接
ENAMETOOLONG:(statfs()) 路径名太长
ENOENT:(statfs()) 文件不存在
ENOMEM: 核心内存不足
ENOSYS: 文件系统不支持调用
ENOTDIR:(statfs())路径名中当作目录的组件并非目录
EOVERFLOW:信息溢出
5.例:
int main(int argc, char *argv[])
{
char buf[]="/home";
struct statfs stStatfs;
int lSts;
int percentage; /*已用百分比*/
memset(&stStatfs, 0, sizeof(struct statfs));
lSts = 0;
lSts = statfs(buf, &stStatfs);
if (0 != lSts)
{
printf("获取失败\n");
goto OUT;
}
percentage = (stStatfs.f_blocks - stStatfs.f_bfree) * 100 /(stStatfs.f_blocks - stStatfs.f_bfree + stStatfs.f_bavail) + 1;
printf("文件系统%20s 1k-块%5s 已用%5s 可用 已用%%%5s 挂载点\n", "", "", "", "", "", "");
printf("%ld %ld %ld %ld %%%d\n", stStatfs.f_type, 4*stStatfs.f_blocks, 4*(stStatfs.f_blocks - stStatfs.f_bfree), 4*stStatfs.f_bavail, percentage);
system("df /home");
OUT:
return 0;
}