红联Linux门户
Linux帮助

linux获取U盘可用空间大小,U盘大小——statfs的使用

发布时间:2017-06-09 11:05:33来源:linux网站作者:zhouzhenhe2008
当U盘挂载成功后,知道了U盘的挂载路径,比如/sda/sda1挂载到路径/mnt/abc下,那么如果想知道sda1的可用空间和总大小,可以传/mnt/abc进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; /* 经过优化的传输块大小,单位B*/
long f_blocks; /* 文件系统数据块总数 */
long f_bfree; /* 可用块数 */
long f_bavail; /* 非超级用户可获取的块数 */
long f_files; /* 文件结点总数 */
long f_ffree; /* 可用文件结点数 */
fsid_t f_fsid; /* 文件系统标识 */
long f_namelen; /* 文件名的最大长度 */
};
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/statfs.h>
int main()
{
struct statfs s;
int total = 0;
int free = 0;
char chDir[255] = {0};
memset(&s, 0, sizeof(struct statfs));
if(NULL == getcwd(chDir,sizeof(chDir)-1))
{
return -1;
}
printf("\n getcwd = %s \n",chDir );
if( 0 != statfs(chDir, &s) )
{
return -1;
}
if(s.f_bsize >= 1024)
{
printf("\n if(s.f_bsize >= 1024)\n");
total = (int)(  (s.f_bsize / 1024 ) * s.f_blocks );
free = (int) ( ( s.f_bsize / 1024 ) * s.f_bavail );
}
else
{
printf("\n if(s.f_bsize >= 1024)  else\n");
total = (int)(  (s.f_blocks / 1024 ) * s.f_bsize );
free = (int) ( ( s.f_bavail / 1024 ) * s.f_bsize );
}
printf("\n total [%d] KB    free[%d] KB\n", total, free);
return 0;
}
linux获取U盘可用空间大小,U盘大小——statfs的使用
 
Python计算剩余空间
>>> 40045284/1024/1024
38
>>> 40045284.0/1024.0/1024.0
38.190158843994141
38.18G,
linux   df  路径 -h的结果:
linux获取U盘可用空间大小,U盘大小——statfs的使用
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31367.html