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

建设银行杭州网站首页个人做免费的网站

建设银行杭州网站首页,个人做免费的网站,2021最火电商平台,windows优化大师是电脑自带的吗1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分#xff0c;先介绍LittleFS文件系统的结构体#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分先介绍LittleFS文件系统的结构体然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、结构体我们先简单了解下后文会使用到的。 枚举lfs_type定义文件类型了解下普通文件LFS_TYPE_REG和目录LFS_TYPE_DIR即可。枚举lfs_open_flags定义文件系统的打开标签属性信息需要熟悉常用的只读LFS_O_RDONLY、只写LFS_O_WRONLY、读写LFS_O_RDWR等等。 // File types enum lfs_type {// file typesLFS_TYPE_REG 0x001,LFS_TYPE_DIR 0x002,// internally used typesLFS_TYPE_SPLICE 0x400,LFS_TYPE_NAME 0x000,LFS_TYPE_STRUCT 0x200,LFS_TYPE_USERATTR 0x300,LFS_TYPE_FROM 0x100,LFS_TYPE_TAIL 0x600,LFS_TYPE_GLOBALS 0x700,LFS_TYPE_CRC 0x500,// internally used type specializationsLFS_TYPE_CREATE 0x401,LFS_TYPE_DELETE 0x4ff,LFS_TYPE_SUPERBLOCK 0x0ff,LFS_TYPE_DIRSTRUCT 0x200,LFS_TYPE_CTZSTRUCT 0x202,LFS_TYPE_INLINESTRUCT 0x201,LFS_TYPE_SOFTTAIL 0x600,LFS_TYPE_HARDTAIL 0x601,LFS_TYPE_MOVESTATE 0x7ff,// internal chip sourcesLFS_FROM_NOOP 0x000,LFS_FROM_MOVE 0x101,LFS_FROM_USERATTRS 0x102, };// File open flags enum lfs_open_flags {// open flagsLFS_O_RDONLY 1, // Open a file as read only #ifndef LFS_READONLYLFS_O_WRONLY 2, // Open a file as write onlyLFS_O_RDWR 3, // Open a file as read and writeLFS_O_CREAT 0x0100, // Create a file if it does not existLFS_O_EXCL 0x0200, // Fail if a file already existsLFS_O_TRUNC 0x0400, // Truncate the existing file to zero sizeLFS_O_APPEND 0x0800, // Move to end of file on every write #endif// internally used flags #ifndef LFS_READONLYLFS_F_DIRTY 0x010000, // File does not match storageLFS_F_WRITING 0x020000, // File has been written since last flush #endifLFS_F_READING 0x040000, // File has been read since last flush #ifndef LFS_READONLYLFS_F_ERRED 0x080000, // An error occurred during write #endifLFS_F_INLINE 0x100000, // Currently inlined in directory entry };结构体lfs_t是littlefs文件系统类型结构体lfs文件系统操作接口的第一个参数一般为这个结构体。成员变量struct lfs_config *cfg下文会涉及其他成员变量可以暂不了解。 // The littlefs filesystem type typedef struct lfs {lfs_cache_t rcache;lfs_cache_t pcache;lfs_block_t root[2];struct lfs_mlist {struct lfs_mlist *next;uint16_t id;uint8_t type;lfs_mdir_t m;} *mlist;uint32_t seed;lfs_gstate_t gstate;lfs_gstate_t gdisk;lfs_gstate_t gdelta;struct lfs_free {lfs_block_t off;lfs_block_t size;lfs_block_t i;lfs_block_t ack;uint32_t *buffer;} free;const struct lfs_config *cfg;lfs_size_t name_max;lfs_size_t file_max;lfs_size_t attr_max;#ifdef LFS_MIGRATEstruct lfs1 *lfs1; #endif } lfs_t; 结构体lfs_file_t、lfs_dir_t分别是littlefs的文件和目录类型结构体暂不需要关心成员变量细节知道结构体的用途即可。 // littlefs directory type typedef struct lfs_dir {struct lfs_dir *next;uint16_t id;uint8_t type;lfs_mdir_t m;lfs_off_t pos;lfs_block_t head[2]; } lfs_dir_t;// littlefs file type typedef struct lfs_file {struct lfs_file *next;uint16_t id;uint8_t type;lfs_mdir_t m;struct lfs_ctz {lfs_block_t head;lfs_size_t size;} ctz;uint32_t flags;lfs_off_t pos;lfs_block_t block;lfs_off_t off;lfs_cache_t cache;const struct lfs_file_config *cfg; } lfs_file_t; 结构体lfs_config用于提供初始化littlefs文件系统的一些配置。其中.read.prog.erase.sync分别对应该硬件平台上的底层的读写\擦除\同步等接口。 read_size 每次读取的字节数可以比物理读单元大以改善性能这个数值决定了读缓存的大小但值太大会带来更多的内存消耗。 prog_size 每次写入的字节数可以比物理写单元大以改善性能这个数值决定了写缓存的大小必须是read_size的整数倍但值太大会带来更多的内存消耗。 block_size 每个擦除块的字节数可以比物理擦除单元大但此数值应尽可能小因为每个文件至少会占用一个块。必须是prog_size的整数倍。 block_count 可以被擦除的块数量这取决于块设备的容量及擦除块的大小。 // Configuration provided during initialization of the littlefs struct lfs_config {// Opaque user provided context that can be used to pass// information to the block device operationsvoid *context;int (*read)(const struct lfs_config *c, lfs_block_t block,lfs_off_t off, void *buffer, lfs_size_t size);int (*prog)(const struct lfs_config *c, lfs_block_t block,lfs_off_t off, const void *buffer, lfs_size_t size);int (*erase)(const struct lfs_config *c, lfs_block_t block);int (*sync)(const struct lfs_config *c);#ifdef LFS_THREADSAFEint (*lock)(const struct lfs_config *c);int (*unlock)(const struct lfs_config *c); #endiflfs_size_t read_size;lfs_size_t prog_size;lfs_size_t block_size;lfs_size_t block_count;int32_t block_cycles;lfs_size_t cache_size;lfs_size_t lookahead_size;void *read_buffer;void *prog_buffer;void *lookahead_buffer;lfs_size_t name_max;lfs_size_t file_max;lfs_size_t attr_max;lfs_size_t metadata_max; }; 结构体lfs_info用于维护文件信息包含文件类型大小和文件名信息。 // File info structure struct lfs_info {// Type of the file, either LFS_TYPE_REG or LFS_TYPE_DIRuint8_t type;// Size of the file, only valid for REG files. Limited to 32-bits.lfs_size_t size;// Name of the file stored as a null-terminated string. Limited to// LFS_NAME_MAX1, which can be changed by redefining LFS_NAME_MAX to// reduce RAM. LFS_NAME_MAX is stored in superblock and must be// respected by other littlefs drivers.char name[LFS_NAME_MAX1]; }; 1.2 LiteOS-M LittleFS的结构体 我们来看下在文件components\fs\littlefs\lfs_api.h里定义的几个结构体。结构体LittleFsHandleStruct维护文件相关的信息该结构体的成员包含是否使用文件路径和lfs文件系统类型结构体lfs_t *lfsHandle和文件类型结构体lfs_file_t file。类似的结构体FileDirInfo维护目录相关的信息该结构体成员包含包含是否使用目录名称和lfs文件系统类型结构体lfs_t *lfsHandle和目录类型结构体lfs_dir_t dir。另外一个结构体FileOpInfo维护文件操作信息。 typedef struct {uint8_t useFlag;const char *pathName;lfs_t *lfsHandle;lfs_file_t file; } LittleFsHandleStruct;struct FileOpInfo {uint8_t useFlag;const struct FileOps *fsVops;char *dirName;lfs_t lfsInfo; };typedef struct {uint8_t useFlag;char *dirName;lfs_t *lfsHandle;lfs_dir_t dir; } FileDirInfo; 2、LiteOS-M LittleFS的重要全局变量及操作 了解下文件components\fs\littlefs\lfs_api.c定义的常用全局变量。⑴处的g_lfsDir数组维护目录信息默认支持的目录数目为LFS_MAX_OPEN_DIRS等于10。⑵处的g_fsOp数组维护针对每个挂载点的文件操作信息默认挂载点数目LOSCFG_LFS_MAX_MOUNT_SIZE为3个。⑶处的g_handle数组维护文件信息默认支持文件的数量LITTLE_FS_MAX_OPEN_FILES为100个。⑷处开始的struct dirent g_nameValue是目录项结构体变量用于函数LfsReaddir()pthread_mutex_t g_FslocalMutex是互斥锁变量g_littlefsMntName是挂载点名称数组。⑸处开始的挂载操作变量g_lfsMnt、文件操作操作全局变量g_lfsFops在虚拟文件系统中被使用。 ⑴ FileDirInfo g_lfsDir[LFS_MAX_OPEN_DIRS] {0};⑵ struct FileOpInfo g_fsOp[LOSCFG_LFS_MAX_MOUNT_SIZE] {0}; ⑶ static LittleFsHandleStruct g_handle[LITTLE_FS_MAX_OPEN_FILES] {0}; ⑷ struct dirent g_nameValue;static pthread_mutex_t g_FslocalMutex PTHREAD_MUTEX_INITIALIZER;static const char *g_littlefsMntName[LOSCFG_LFS_MAX_MOUNT_SIZE] {/a, /b, /c};...... ⑸ const struct MountOps g_lfsMnt {.Mount LfsMount,.Umount LfsUmount,};const struct FileOps g_lfsFops {.Mkdir LfsMkdir,.Unlink LfsUnlink,.Rmdir LfsRmdir,.Opendir LfsOpendir,.Readdir LfsReaddir,.Closedir LfsClosedir,.Open LfsOpen,.Close LfsClose,.Write LfsWrite,.Read LfsRead,.Seek LfsSeek,.Rename LfsRename,.Getattr LfsStat,.Fsync LfsFsync,.Fstat LfsFstat,}; 下文继续介绍下和这些变量相关的内部操作接口。 2.1 目录信息数组操作 GetFreeDir()设置目录信息数组元素信息。参数dirName为目录名称。遍历目录信息数组遍历到第一个未使用的元素标记其为已使用状态设置目录名称返回目录信息元素指针地址。如果遍历失败返回NULL。函数FreeDirInfo()为函数GetFreeDir()的反向操作根据目录名称设置对应的数组元素为未使用状态并把GetFreeDir设置为NULL。 函数CheckDirIsOpen()用于检测目录是否已经打开。如果目录信息数组中记录着对应的目录信息则标志着该目录已经打开。 FileDirInfo *GetFreeDir(const char *dirName) {pthread_mutex_lock(g_FslocalMutex);for (int i 0; i LFS_MAX_OPEN_DIRS; i) {if (g_lfsDir[i].useFlag 0) {g_lfsDir[i].useFlag 1;g_lfsDir[i].dirName strdup(dirName);pthread_mutex_unlock(g_FslocalMutex);return (g_lfsDir[i]);}}pthread_mutex_unlock(g_FslocalMutex);return NULL; }void FreeDirInfo(const char *dirName) {pthread_mutex_lock(g_FslocalMutex);for (int i 0; i LFS_MAX_OPEN_DIRS; i) {if (g_lfsDir[i].useFlag 1 strcmp(g_lfsDir[i].dirName, dirName) 0) {g_lfsDir[i].useFlag 0;if (g_lfsDir[i].dirName) {free(g_lfsDir[i].dirName);g_lfsDir[i].dirName NULL;}pthread_mutex_unlock(g_FslocalMutex);}}pthread_mutex_unlock(g_FslocalMutex); }BOOL CheckDirIsOpen(const char *dirName) {pthread_mutex_lock(g_FslocalMutex);for (int i 0; i LFS_MAX_OPEN_DIRS; i) {if (g_lfsDir[i].useFlag 1) {if (strcmp(g_lfsDir[i].dirName, dirName) 0) {pthread_mutex_unlock(g_FslocalMutex);return TRUE;}}}pthread_mutex_unlock(g_FslocalMutex);return FALSE; }如果大家想更加深入的学习 OpenHarmony 开发的内容不妨可以参考以下相关学习文档进行学习助你快速提升自己 OpenHarmony 开发环境搭建https://qr18.cn/CgxrRy 《OpenHarmony源码解析》https://qr18.cn/CgxrRy 搭建开发环境Windows 开发环境的搭建Ubuntu 开发环境搭建Linux 与 Windows 之间的文件共享…… 系统架构分析https://qr18.cn/CgxrRy 构建子系统启动流程子系统分布式任务调度子系统分布式通信子系统驱动子系统…… OpenHarmony 设备开发学习手册https://qr18.cn/CgxrRy OpenHarmony面试题内含参考答案https://qr18.cn/CgxrRy 写在最后 如果你觉得这篇内容对你还蛮有帮助我想邀请你帮我三个小忙点赞转发有你们的 『点赞和评论』才是我创造的动力。关注小编同时可以期待后续文章ing不定期分享原创知识。想要获取更多完整鸿蒙最新学习资源请移步前往小编https://qr21.cn/FV7h05
http://www.w-s-a.com/news/661587/

相关文章:

  • 设计师个人作品集模板班级优化大师网页版登录
  • 高端网站建设教学网站开发前期准备工作
  • 网站评论列表模板设计官网的
  • 怎么做可以访问网站ui设计自学学的出来吗
  • 网站如何接入支付宝软件开发工作内容描述
  • 廊坊网站建设搭建整合营销传播的效果表现为
  • 网站服务器在本地是指园林绿化
  • 公司网站建设需要什么科目网站代运营价格
  • 网站建设前的ER图ppt模板图片 背景
  • 做一个网站花多少钱网站导航营销步骤
  • 仙桃网站定制做房产网站能赚钱吗
  • 西安网站制作模板最新源码
  • 南京江宁网站建设大学高校网站建设栏目
  • 模板网站建设明细报价表做网站第一
  • 公司网站建设系统软件开发 上海
  • 怎么让公司建设网站固安县建设局网站
  • 360免费建站官网入口手机网站建设设计
  • 商城网站建站系统dw如何做网页
  • 网站建设的公司收费我有网站 怎么做淘宝推广的
  • 网站建设策划书事物选题手机兼职app
  • html5 微网站模版wordpress博客速度很慢
  • 怎么做五个页面网站网络推广如何收费
  • 上虞宇普电器网站建设江西建筑人才网
  • 在吗做网站商城一个网站需要服务器吗
  • 先做网站再备案吗中山微网站建设报价
  • 树莓派可以做网站的服务器吗网站建设与设计ppt
  • 网站访问速度分析网站怎么做让PC和手机自动识别
  • 网站建设要考西宁网站建设多少钱
  • 网站开发公司东莞网站推广计划书具体包含哪些基本内容?
  • 素材天下网站惠州网站建设行业