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

极简文件列表

简介

单片机里搭建webserver,储存的资源需要用文件系统。如果使用fatfs之类的,体积太庞大,所以需要自己搭建一个按名访问的极简文件系统。

文件对象结构

typedef struct {char *name;char *content;
}File_Item_t;
  • name:文件名
  • content:文件内容

文件存储和注册

/// @brief File List
File_Item_t File_List[config_MAX_FileItem] = {0};/// @brief register file name and file content to FileSystem
/// @param i :index
/// @param name :file name
/// @param content :file content, could be stored in flash or in ram
void SF_register(uint16_t i, char *name, char *content)
{if(i >= config_MAX_FileItem)return;File_List[i].name = name;File_List[i].content = content;
}

文件按名访问

按名访问只做到获取文件内容头指针,对文件的读写要自己建立缓冲区进行读写,文件长度限制要注意。

/// @brief find file by name
/// @param file_name :file name
/// @param len :file name length, should be identical with name length in filesystem
/// @return file item pointer(File_Item_t *)
File_Item_t *SF_find(char *file_name, uint8_t len)
{if(len > config_MAX_Namelen)return 0;for(uint16_t i = 0; i < config_MAX_FileItem; i++){if((strlen(file_name) == strlen(File_List[i].name)) && (!memcmp(file_name, File_List[i].name, strlen(file_name)))){return &(File_List[i]);}}return 0;
}

测试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include "Simple_Filesystem.h"const char *file0_name = "boot0.bin";
const char *file0_content = "bin0bin0bin0bin0bin0bin0bin0bin0bin0";
const char *file1_name = "boot1.bin";
const char *file1_content = "bin1bin1bin1bin1bin1bin1bin1bin1bin1";int main(int argc, char **argv)
{SF_register(0, (void *)file0_name, (void *)file0_content);SF_register(1, (void *)file1_name, (void *)file1_content);File_Item_t *filep = NULL;filep = SF_find("boot0.bin", strlen("boot0.bin"));if(filep)printf("file %s = %s\r\n",filep->name, filep->content);filep = SF_find("boot1.bin", strlen("boot1.bin"));if(filep)printf("file %s = %s\r\n",filep->name, filep->content);return 0;
}

在这里插入图片描述

http://www.dtcms.com/a/410264.html

相关文章:

  • CSS Grid 网格布局完整指南:从容器到项目,实战详解
  • 百度手机模板网站阿里云WordPress主题
  • 批量获取oracle的AWR报告方法
  • docker jenkins gitlab 流水线构建
  • MySQL 配置调优参数:从基础到生产级优化指南
  • 旅游网站设计模板cdr里做网站超级链接
  • TypeScript + React + Ant Design 前端架构入门:搭建一个 Flask 个人博客前端
  • 小九源码-springboot051-智能推荐旅游平台
  • 网站建设面试问题网站建设 学习 长沙
  • 【云原生】openebs-device+cstor存储方案部署
  • 破译古籍密码,HisDoc-DETR论文解读
  • Kafka 面试题及详细答案100道(66-80)-- 运维与部署
  • 衡阳网站优化公司个人网站可以做音乐吗
  • 怎么iis设置网站太原网站建设外包
  • UVa1008/LA2240 A Vexing Problem
  • 如何利用Yarn定位数据倾斜问题?
  • 开源 C# 快速开发(四)自定义控件--波形图
  • javaweb3【ServletContext知识】
  • Java 复制 PowerPoint 幻灯片:高效实现演示文稿内容复用
  • ⸢ 陆 ⸥ ⤳ 可信纵深防御:整体架构
  • 医疗数据ETL开发流程总结
  • 网站制作多久能完成泰州做网站需要多少钱
  • 【汽车篇】AI深度学习在汽车零部件外观检测——铝铸件中的应用
  • Unity 虚拟仿真实验中设计模式的使用 ——工厂模式(Factory Pattern)
  • 网站备案初审过了企业信息门户网站建设方案
  • 【力扣LeetCode】231_2的幂(法1:循环迭代,法2:位运算)
  • 【便宜整数正分解】2022-11-23
  • hive连不上,报错9000拒绝连接
  • 力扣hot100 | 多维动态规划 | 62. 不同路径、64. 最小路径和、5. 最长回文子串、1143. 最长公共子序列、72. 编辑距离
  • 构建生产级多模态数据集:视觉与视频模型(参照LLaVA-OneVision-Data和VideoChat2)