4412开发板linux环境取得U盘容量等信息的方法
环境:讯为4412开发板 liunx系统 QT5.7.0
实现方法:
1、执行linux的df命令,得到开发板U盘设备文件的挂载点:“/mnt/usbdisk/sda1”。
2、通过statfs函数取得U盘的磁盘容量信息。
3、建立QT Widgets Application工程,添加1个“pushButton”和3个“label”组件,添加“pushButton”的click槽函数,在该函数中实现具体功能,详细参考如下代码。
主要实现代码:
#define USB_DISK_ARM_PATH "/mnt/usbdisk/sda1"
void MainWindow::on_pushButton_clicked()
{
/* get usb disk size */
struct statfs Udisk;
quint64 usedBytes = 0;
quint64 freeBytes = 0;
quint64 totalBytes = 0;
quint64 endSpace = 0;
if (statfs(USB_DISK_ARM_PATH, &Udisk) == -1){
return;
}
totalBytes = (quint64)Udisk.f_blocks * (quint64)Udisk.f_frsize;
freeBytes = (quint64)Udisk.f_bfree * (quint64)Udisk.f_frsize;
usedBytes = (quint64)(totalBytes - freeBytes);
totalBytes = totalBytes/1024;
freeBytes = usedBytes/1024;
usedBytes = freeBytes/1024;
ui->label1->setText(QString::number(totalBytes, 10));
ui->label2->setText(QString::number(totalBytes, 10));
ui->label3->setText(QString::number(totalBytes, 10));
}
----------------------------------------------
备注:
1、df命令显示内容详解
root@ubuntu:/home/my# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 957496 312908 644588 33% /
tmpfs 827268 0 827268 0% /dev/shm
/dev/sda1 15633392 600440 15032952 4% /mnt/usbdisk/sda1
df命令每一列显示内容的含义
第1列:设备文件系统所在的路径
第2列:磁盘的总容量,单位为1K字节
第3列:磁盘已经使用的容量
第4列:磁盘的剩余容量
第5列:磁盘已经使用的空间占据总容量的百分比
第6列:磁盘的挂载点名称
2、statfs函数详解
int statfs(const char *path, struct statfs *buf)
path:文件系统的文件路径名(不是设备名,是挂载点名称)
buf:statfs结构体的指针变量,用于储存文件系统的相关信息
返回值: 成功执行时,返回0。失败返回-1
需要的头文件:#include <sys/statfs.h>
3、statfs结构体
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; /* 文件名的最大长度 */
};
-------------------------------------------------