当前位置: 首页 > news >正文

解锁fs文件系统额外操作

在系统管理中,文件系统的“额外操作”往往是提升效率和保障安全的隐藏利器。无论是通过chattr设置文件不可变属性,还是利用LVM快照进行备份,这些附加功能都能在关键时刻发挥重要作用。本文将带你全面了解并掌握这些实用技巧。

一、概述

fs库是LuatOS的核心文件系统操作模块,提供对设备存储空间的底层访问能力。该库支持对嵌入式设备的Flash存储器,外部存储器(sd卡)进行空间查询,获取文件大小的操作功能。

PS:现fs库功能均可在io库内接口实现,强烈建议后续全部使用io库功能。

io.fsstat(path)替代fs.fsstat(path)

io.fileSize(path)替代fs.fsize(path)

1.1 存储系统概述

LuatOS的存储系统采用清晰的分层架构设计,其核心目标是为应用层提供统一、简洁的文件操作接口,从而屏蔽底层不同存储介质和文件系统的差异。开发者无需关心数据具体存储在何种硬件上,也无需关心底层文件系统的具体实现,只需调用统一的API即可完成文件操作。

该系统的层次结构与各组件间的协作关系如下图所示,其数据流与依赖关系自上而下贯穿各层:
image

1.1.1 物理硬件层

这是数据存储的物理载体,LuatOS支持多种常见的嵌入式存储硬件:

1、SPI/SDIO TF卡:通过高速SPI或SDIO接口连接的块存储设备,特点是容量大、可插拔,适用于存储大量数据(如音频、图片文件);

2、SPI NOR Flash:通过SPI接口访问的NOR型闪存。其特点是读写速度快,通常用于存放固件代码或需要快速读写的关键数据;

3、SPI NAND Flash:通过SPI接口访问的NAND型闪存。其特点是容量大、成本低,适用于存储日志等容量需求较大的数据;

1.1.2 文件系统实现层(fatfs&lf)

文件系统负责管理存储设备的空间,组织文件和目录结构。LuatOS根据硬件特性,适配了两种主流的嵌入式文件系统:

1、FATFS:一个兼容FAT12/FAT16/FAT32标准的通用文件系统。它通常与SD/TF卡配对使用,;

2、LFS(LittleFS):它通常与SPI NOR Flash和SPI NAND Flash配对使用,非常适合在裸Flash设备上运行;

1.1.3 统一API层 (io)

fs库不推荐新用户使用,该库仅对已经使用过的老用户进行保留,其功能已经完全移植到io库中,且更加完善,新用户建议都参考io核心库:

1、fs 库:提供文件系统的额外操作不建议使用,请使用io库进行替代;

2、io 库:提供标准的数据流操作接口,用于文件的打开、读写、关闭等,是处理文件内容的主要手段,包含fs库的所有功能,推荐使用;

1.1.4 应用层(luatOS应用脚本)

用户通过调用io库,fatfs库,lf库以及fs库中的api接口,来实现自己的业务逻辑。

1.1.5 推荐使用

image
对于FAT文件系统需求,使用 fatfs 库。

对于文件内容操作需求,使用 io 库。

1.2 关于"块"(block )的概念解释

块(Block)是文件系统管理存储的基本单位,但需要注意:

1.2.1 块的数量是整数

fs.fsstat 返回的"总空间"和"已用空间"值表示的是块的数量这些都是整数。

1.2.2 块的大小也是整数

每个块的大小是固定的,通常是512字节或4096字节等2的幂次方。

1.2.3 为什么需要单独返回块大小

1、不同的文件系统可能使用不同的块大小

2、同一设备上的不同分区可能使用不同的块大小

3、知道块大小才能将块数量转换为实际字节数

1.2.4 计算实际空间

1、总空间(字节) = 总块数 × 块大小

2、已用空间(字节) = 已用块数 × 块大小

3、空闲空间(字节) = (总块数 - 已用块数) × 块大小

1.2.5 为什么会有这样的设计?

这种设计(返回块数和块大小而不是直接返回字节数)有以下几个原因:

1、效率:文件系统内部是以块为单位管理空间的,直接返回块数更高效

2、精确性:避免浮点数运算可能带来的精度问题

3、灵活性:适应不同块大小的文件系统

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
image

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;

如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;

fs核心库无常量

四、函数详解

4.1 fs.fsstat(path)

功能

获取文件系统状态信息;

注意事项

1、路径参数可选,默认为根目录"/",表示模组内置Flash中的文件系统分区;

2、目前在传入错误路径的情况下,会自动调整为可查的文件系统分区根目录,强烈建议使用io.fsstat(path);

3、返回多个值表示文件系统状态信息;

参数

path
image

返回值

local success, total_blocks, used_blocks, block_size, fs_type = fs.fsstat(path);

存在五个返回值:success, total_blocks, used_blocks, block_size, fs_type;

success
image

total_blocks
image

used_blocks
image

block_size
image

fs_type
image

示例

image

4.2 fs.fsize(path)

功能

获取文件大小;

注意事项

1、必须提供有效的文件路径;

2、无法判断文件是否存在,如要判断请使用io.exists(path);

参数

path
image

返回值

local size = fs.fsize(path)

有一个返回值 size

size
image

示例
image

其他情况示例
image

五、模组支持说明

支持 LuatOS 开发的所有模组都支持 fs 核心库,但是不建议使用,请使用io核心库接口实现业务逻辑。

今天的内容就分享到这里了~

http://www.jsqmd.com/news/374208/

相关文章:

  • 2026年广州商标注册代理排名,哪家靠谱又具性价比? - myqiye
  • 论文写不动?倍受青睐的AI论文平台 —— 千笔·专业学术智能体
  • 《人月神话》阅读笔记(2)
  • 宠物饲养箱环境监测系统
  • 售后完善的跳楼机供应商有哪些,天鸿游乐性价比高 - 工业设备
  • 智慧水务运维管理平台如何助力守护城市生命线
  • 2026年内蒙古人力资源服务公司深度评测:聚焦专业价值与合规赋能 - 品牌推荐
  • ubuntu 22.04.3虚拟机及默认安装后窗口小处理方法
  • 国产化富文本编辑器支持PDF直接粘贴功能吗?
  • 完整教程:【OpenCV】Python图像处理之按位逻辑运算
  • 《构建之法》阅读笔记(1)
  • JSP网页断点续传文件夹有哪些方法?
  • 奥特莱斯礼品卡怎么回收?教你省钱又高效的回收方式 - 团团收购物卡回收
  • 从新手到高手,2026年GEO服务商我只服DeepSeek GEO,长尾词布局全解析 - 品牌2025
  • 从策划到落地:2026年值得关注的会展服务公司实测,展会搭建/展厅设计/会场布置/展厅装修/展位搭建,会展服务企业找哪家 - 品牌推荐师
  • JSP上传文件夹时,如何进行分段处理?
  • MongoDB(6)什么是BSON?
  • 掌握武商一卡通回收流程,用这些技巧享受便捷服务 - 团团收购物卡回收
  • 军工领域CMS平台导入Excel数据如何避免乱码?
  • 斯玛特卡怎么用最省钱?回收流程和使用技巧大揭密 - 团团收购物卡回收
  • 2026PAC厂家哪家好?行业与区域双维度优质解析 - 深度智识库
  • 从T类型变量创造一个新的T类型变量就是玩转Rust高级应用. ToOwned trait 给出的是一种更“泛化”的Clone 的特性,Clone一般
  • 解决LLM推理“脑裂”难题:Kubernetes LeaderWorkerSet(LWS)组件在大模型推理部署中的应用
  • 盘点2026年郑州荷花国际月子中心,服务性价比高值得选 - 工业推荐榜
  • 基于深度学习的遥感地面物体检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Django+web+训练代码+数据集)
  • 深度解析:Binpack调度策略在智算场景中的优势与作用
  • 2026年全国别墅电梯品牌哪家有实力?靠谱耐用 适配高端住宅与旧楼加装 多场景个性化需求 - 深度智识库
  • 2026年股票配资平台选择标准:安全、正规、实盘三大核心 - 资讯焦点
  • 总结浙江比较好的女士西装专业公司,哪家服务更好 - 工业品网
  • 宏邦机械转台费用多少钱,性价比品牌排名 - 工业品牌热点