嵌入式linux下获取flash分区大小

简介: 嵌入式linux下获取flash分区大小

嵌入式系统中,由于flash存储空间有限,或者是存储数据,实现数据的循环删除,需要获取到分区的使用情况,可以通过系统下的函数statfs来获取使用情况;实现代码如下:


flashInfo.cpp

#include <stdio.h>                                                                                                                  
#include <stdlib.h>
#include <unistd.h>
#include <sys/vfs.h>
 
typedef unsigned long long u64;
 
//unit: 0-MBytes, 1-KBytes, default MBytes
int getPartitionUse(const char *dir, size_t &totleSize, size_t &freeSize, int unit)
{
    struct statfs diskInfo;  
    int ret = statfs(dir, &diskInfo);  
  if ( ret != 0 )
  {
    perror("getPartitionUse statfs error ");
    return ret;
  }
  
    u64 allBlocks = diskInfo.f_bsize;  
    u64 tmpTotalSize = allBlocks * diskInfo.f_blocks;  
    u64 tmpFreeDisk = diskInfo.f_bfree*allBlocks;  
    totleSize = tmpTotalSize>>20;  
  freeSize  = tmpFreeDisk>>20;
  
  if(unit == 0)
  { 
    totleSize = tmpTotalSize>>20;  
    freeSize  = tmpFreeDisk>>20;  
  }
  else if( unit == 1 )
  {
    totleSize = tmpTotalSize>>10;  
    freeSize  = tmpFreeDisk>>10; 
  }
  
  return 0;
}
 
int main()
{
  size_t totleSize = 0;
  size_t freeSize = 0;
  
    getPartitionUse("/", totleSize,freeSize, 0);
    printf ("system  total=%dMB, free=%dMB\n", totleSize, freeSize);  
 
    getPartitionUse("/work/data", totleSize,freeSize, 0);
    printf ("data  total=%dMB, free=%dMB\n", totleSize, freeSize);  
  
    getPartitionUse("/work", totleSize,freeSize, 0);
    printf ("config  total=%dMB, free=%dMB\n", totleSize, freeSize);  
}


编译:

mipsel-linux-g++ flashInfo.c -o flashInfo

运行结果如下:


这样可以在界面或者内置web上用进度条的形式显示出来,比较直观。

目录
相关文章
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
5月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
166 1
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
171 0
|
3月前
|
存储 Linux 5G
linux操作系统初始化后,再也不用手动分区了
linux操作系统初始化后,再也不用手动分区了
33 0
|
3月前
|
Linux
在Linux中,如何创建一个分区?
在Linux中,如何创建一个分区?
|
3月前
|
Linux 开发工具
在Linux中,如何创建一个新的分区并格式化为EXT4文件系统?
在Linux中,如何创建一个新的分区并格式化为EXT4文件系统?
|
4月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
5月前
|
Linux Shell 虚拟化
开机自动挂载NTFS分区至Linux:分步指南
在Linux中自动挂载Windows NTFS分区,需创建挂载点(如`/media/c_win`),识别分区(如`/dev/sda1`),获取UUID,并编辑`fstab`文件添加挂载信息。推荐使用UUID以保持稳定性。在VMware环境中可能需添加`force`选项。完成这些步骤后,重启系统,NTFS分区将自动挂载。这对于双系统用户非常方便。
|
消息中间件 缓存 Unix
[面试必备]嵌入式Linux内核开发必须了解的三十道题
[面试必备]嵌入式Linux内核开发必须了解的三十道题