• 7591阅读
  • 3回复

[提问]u盘挂载到/mnt/udisk下,如何判断u盘剩余容量呢? [复制链接]

上一主题 下一主题
离线haoyunp
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-05
关键词: u盘容量
u盘挂载到/mnt/udisk下,如何判断u盘剩余容量呢?
离线XChinux

只看该作者 1楼 发表于: 2011-08-05
QProcess执行start("df /mnt/udisk")
获取返回值
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线haoyunp
只看该作者 2楼 发表于: 2011-08-05
谢谢。
离线haoyunp
只看该作者 3楼 发表于: 2011-08-05
也可以用函数来实现:
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 = 0;    
struct statfs disk_statfs;
long long totalspace = 0;
float freeSpacePercent = 0 ;

if( statfs(pDisk, &disk_statfs) >= 0 )
{
freespace = (((long long)disk_statfs.f_bsize  * (long long)disk_statfs.f_bfree)/(long long)1024);
totalspace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_blocks) /(long long)1024);
}    
freeSpacePercent = ((float)freespace/(float)totalspace)*100 ;
return freeSpacePercent ;
}

快速回复
限100 字节
 
上一个 下一个