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

yaffs

YAFFS(Yet Another Flash File System)是专为NAND闪存设计的日志结构文件系统,其核心原理围绕NAND闪存的特性优化数据管理。以下是其关键原理的详细说明:

1. NAND闪存适配

  • 写入限制:NAND闪存需按页写入(通常4KB),且写入前需擦除整个块(如128页)。YAFFS通过追加写入避免频繁擦除,仅在块写满后触发垃圾回收。
  • 寿命管理:通过磨损均衡算法分散擦写操作,防止特定块过早损坏。

2. 日志结构与数据组织

  • 数据节点(Chunk):每个页存储一个数据节点,包含文件内容或元数据(如文件名、权限)。更新文件时,新数据追加到空闲页,旧页标记为失效。
  • 对象头和数据类型:每个节点以对象头(Object Header)标识所属文件及版本号,支持动态更新元数据。

3. OOB区域利用

  • 元数据存储:每个页的OOB(Out-of-Band)区存储ECC校验码、块状态(有效/无效/空闲)及节点类型(数据/元数据)。
  • 序列号管理:块写入时分配序列号,用于崩溃恢复时确定数据新旧。

4. 垃圾回收(GC)机制

  • 块选择策略:优先回收无效页比例高的块,将有效数据迁移至新块后擦除旧块。
  • 后台执行:GC在系统空闲或空间不足时触发,减少对性能的影响。

5. 掉电恢复与一致性

  • 检查点机制:定期记录文件系统状态(检查点),崩溃后从最近检查点恢复。
  • 原子操作:关键操作(如文件创建)通过日志记录确保原子性,避免部分写入导致数据损坏。

6. 坏块管理

  • 初始化扫描:挂载时检测坏块并标记。
  • 动态处理:写入失败时标记坏块,数据重定向到备用块。

7. 版本演进(YAFFS1 vs YAFFS2)

  • YAFFS1:适用于小页(512B+16B OOB),直接映射文件ID至物理页。
  • YAFFS2:支持大页(2KB+64B OOB),引入多级树结构加速查找,提升大容量存储性能。

8. 目录与文件管理

  • 硬链接支持:通过对象ID关联多个目录项,维护引用计数。
  • 快速挂载:仅扫描OOB区域构建内存结构,无需全盘扫描。

总结

YAFFS通过日志式追加写、OOB元数据管理、动态垃圾回收和强健的崩溃恢复机制,高效应对NAND闪存的物理限制,广泛应用于嵌入式系统(如Linux设备),在资源受限环境下兼顾性能与可靠性。其设计思想深刻影响了后续闪存文件系统的发展。


YAFFS文件系统的读、写、擦操作单位与其底层NAND闪存的物理特性直接相关,具体设计如下:


1. 写入(Write)和读取(Read)操作

  • 按页(Page)操作
    YAFFS的读写操作以页(Page)为最小单位。每个页通常为512字节(YAFFS1)或2KB(YAFFS2),具体大小取决于NAND闪存的规格。

    • 写入时:YAFFS采用追加写入(Append-Only)策略,每次写入新的数据或元数据时,会选择一个空闲页进行写入,而非原地更新旧数据。旧页会被标记为失效(Obsolete)
    • 读取时:直接定位目标文件对应的有效页进行读取,通过内存中的结构(如对象树)快速查找数据位置。
  • OOB(Out-of-Band)区域操作
    每个页的末尾附带一个OOB区(通常16-64字节),用于存储元数据(如ECC校验、页状态、序列号等)。读写页时,OOB区的内容会一并处理


2. 擦除(Erase)操作

  • 按块(Block)操作
    NAND闪存的擦除操作必须按块(Block)执行,一个块通常包含多个页(如64-128页)。YAFFS的擦除行为通过**垃圾回收(Garbage Collection)**触发:
    1. 当某个块内的大部分页被标记为失效时,YAFFS会选择该块进行回收。
    2. 将块内剩余的有效页迁移到新块,随后擦除整个旧块以释放空间。
    3. 擦除后的块被标记为空闲,供后续写入使用。

3. 关键设计逻辑

  • 适配NAND闪存物理限制
    NAND闪存无法原地更新数据,且擦除粒度大、耗时长。YAFFS通过以下设计规避这些问题:

    • 避免频繁擦除:通过追加写入和延迟擦除(仅在GC时擦除块),减少擦除次数。
    • 提升寿命:结合磨损均衡算法,分散擦除操作到不同块。
  • 性能优化

    • 小粒度读写:按页读写减少数据搬运开销。
    • 大粒度擦除:按块擦除匹配硬件特性,提高擦除效率。

4. 操作流程示例

  • 写入文件

    1. 将文件内容按页拆分,依次追加到空闲页。
    2. 更新元数据(如文件大小、修改时间),写入新的元数据页。
    3. 旧数据页标记为失效。
  • 读取文件

    1. 从内存中的对象树定位文件所属的页。
    2. 按页读取有效数据,忽略失效页。
  • 垃圾回收

    1. 选择无效页比例高的块。
    2. 迁移有效页到新块,擦除旧块。

5. YAFFS1与YAFFS2的区别

  • YAFFS1:针对小页(512B + 16B OOB)设计,直接通过页内元数据管理文件。
  • YAFFS2:支持大页(2KB + 64B OOB),引入多级树结构加速页查找,但读写擦单位仍保持一致(页读写、块擦除)。

总结

YAFFS的读写按页擦除按块,这一设计完美契合NAND闪存的物理特性:

  • 页级读写:最小化数据操作粒度,提升效率。
  • 块级擦除:避免频繁擦除,延长闪存寿命。
    这种分层策略使YAFFS在嵌入式系统中(如Linux设备、IoT终端)实现了高性能与高可靠性的平衡。

相关文章:

yaffs

YAFFS(Yet Another Flash File System)是专为NAND闪存设计的日志结构文件系统,其核心原理围绕NAND闪存的特性优化数据管理。以下是其关键原理的详细说明: 1. NAND闪存适配 写入限制:NAND闪存需按页写入(通…...

CMake-环境变量介绍

文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量&#xff0c;但也有些不同&#xff0c;如下&#xff1a; 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量&#xff0c;例如$ENV{<name>}&#xff…...

wordpress表单插件CF7调用方式

Contact Form 7(CF7)是WordPress中非常流行的表单插件&#xff0c;以下是其常见的调用方式&#xff1a; 通过短代码调用 在页面或文章编辑器中添加&#xff1a;完成表单设置后&#xff0c;复制表单对应的短代码&#xff0c;然后在需要显示表单的页面或文章的编辑器中直接粘贴…...

小程序开发中的用户反馈收集与分析

我们在开发小程序的过程中根据开发过程中的代码及业务场景,以下是针对需求管理系统的用户反馈收集与分析方案设计: 需求管理系统用户反馈收集与分析方案 一、反馈数据模型设计 // 新增Feedback模型(app/admin/model/Feedback.php) namespace app\admin\model; use think\…...

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 &#xff08;图1-1&#xff09; 一、鸿蒙中App、HAP、HAR、HSP是什么&#xff1f; &#xff08;1&#xff09;App Pack&#xff08;Application Package&#xff09; 是应用发布的形态&#xff0c;上架应用市场是以App Pa…...

Linux:一些命令记录

netstat -antp|grep -i 27017 | awk {print $5}| cut -d: -f1 | sort | uniq -c | sort -n 查看磁盘大小 du -sh /usr/local/* 查看剩余内存&#xff1a; free -m linux下获取占用CPU资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a; ps aux|head -1;ps aux|gr…...

Microsoft Edge浏览器的取证分析(基于Chromium)

概述 早在2019年&#xff0c;微软就用Chromium替换了EdgeHTML浏览器引擎&#xff0c;这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium&#xff0c;Edge与Chrome浏览器共享一个共同的架构&#xff0c;这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …...

Java面试黄金宝典6

1. 什么是 CAS 原理&#xff1a; CAS &#xff08;Compare-And-Swap&#xff09;是一种硬件级别的原子操作指令&#xff0c;在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是&#xff1a;在进行数据更新时&#xff0c;会先将内存位置 V 的值与预期原值 A 进行比较&#x…...

【计算机网络】网络编程

文章目录 1. 客户端/服务器2. TCP/UDP协议3. 网络编程套接字-socket3.1 API的使用3.1 DatagramScoket类3.1 DatagramScoket类 4. 通过UDP实现回显服务器程序4.1 服务器代码4.2 客户端代码4.3 代码执行过程4.4 通过UDP实现翻译客户端 5. 通过TCP实现回显服务器5.1 服务器代码5.2…...

算法刷题整理合集(七)·【算法赛】

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…...

【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画

第 0 步&#xff1a;项目结构 lighting-text/├─ index.html└─ style.cssindex.html&#xff1a;包含列表 <ul>&#xff0c;其中每个 <li> 放一个字母或符号。style.css&#xff1a;设置背景、文字样式&#xff0c;以及关键帧动画&#xff08;lighting&#xf…...

C#与西门子PLC的六大通信库

C#与西门子PLC的六大通信库&#xff1a; 一、S7.NET S7.NET是一款开源的S7协议通信库&#xff0c;支持西门子S7通信。 二、Sharp7 Sharp7与S7.NET一样&#xff0c;是一款.NET版本的S7通信库。 三、Snap7 Snap7是一个开源的C通信库&#xff0c;支持西门子S7通信。 四、Prodave P…...

VScode

由于centos停止了维护 ,后面使用ubuntu 在Ubuntu中用vscode 充当记事本的作用 替代了centos中vim的作用 后面使用vscode编辑 vscode中继续使用makefile , xshell中的cgdb进行debug (半图形写 ,半命令行debug&&运行) 官网下载地址&#xff1a;https://code.visuals…...

Linux文件系统与磁盘管理

文件系统和磁盘管理是Linux系统管理的核心组成部分&#xff0c;直接影响系统的性能、数据安全性和存储效率。本文将从Linux文件系统的基本概念出发&#xff0c;深入探讨其架构、类型、管理工具以及实际操作技巧&#xff0c;帮助读者全面理解并掌握这一关键领域。 第一章&#x…...

【云馨AI-大模型】大模型的开发和应用中,Python、PyTorch和vLLM关系概括

说明 1. Python 定位&#xff1a;基础编程语言。作用&#xff1a;Python 是大模型生态系统的核心语言&#xff0c;几乎所有深度学习框架&#xff08;如 PyTorch、TensorFlow&#xff09;和工具链&#xff08;如 vLLM&#xff09;都通过 Python 接口提供服务。特点&#xff1a…...

AWS SAP学习笔记-概念

1、什么是ETL应用程序&#xff0c;举个例子说明&#xff1f; ETL&#xff08;Extract, Transform, Load&#xff09;应用程序是一种用于数据处理和迁移的工具或程序&#xff0c;它主要负责从多个数据源提取数据&#xff0c;对数据进行转换和清洗&#xff0c;然后将处理后的数据…...

kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南

前言 Kotlin以函数式编程革新了Android开发&#xff0c;通过高阶函数、扩展函数等特性&#xff0c;帮助开发者构建高可维护性代码。接下来我们来看一下Kotlin 中的函数式编程的各个特性。 1. 高阶函数与 Lambda 表达式&#xff1a;函数作为参数或返回值 在 Kotlin 中&#x…...

SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口、表单项自定义校验规则、Hutool工具类)(4)

目录 一、SpringBoot3Vue3实现基本增删改查。前后端通信交互、配置后端跨域请求。数据批量删除。(博客链接) 二、SpringBoot3Vue3快速开发登录、注册页面并实现对接。 &#xff08;1&#xff09;操作数据表employee(员工信息表)。 <1>修改employee表的字段组成。 <2&g…...

OpenCV图像拼接项目指南

引言 图像拼接是计算机视觉领域中的一个重要应用&#xff0c;它可以将多张有重叠区域的图像拼接成一张全景图。这项技术广泛应用于虚拟现实、医学影像、卫星图像处理等领域。OpenCV作为一个强大的开源计算机视觉库&#xff0c;提供了丰富的工具和函数来实现图像拼接。本文将详…...

机器学习--DBSCAN聚类算法详解

目录 引言 1. 什么是DBSCAN聚类&#xff1f; 2. DBSCAN聚类算法的原理 3. DBSCAN算法的核心概念 3.1 邻域&#xff08;Neighborhood&#xff09; 3.2 核心点&#xff08;Core Point&#xff09; 3.3 直接密度可达&#xff08;Directly Density-Reachable&#xff09; 3…...

使用 Docker 构建 LangChain 开发环镜及 ChatOllama 示例

文章目录 Github官网简介Dockerfilerequirements.txt构建 LangChain 镜像ChatOllama 示例Ollama 示例模拟 tools Github https://github.com/langchain-ai/langchain 官网 https://python.langchain.com/docs/introduction/ 简介 LangChain 是一个用于构建 LLM 驱动的应用…...

持续集成与持续交付:这里有从开发到部署的全流程优化

阅读原文 在上一篇中&#xff0c;我们深入探讨了安全测试的核心内容&#xff0c;强调了它在发现安全漏洞和提升系统安全性中的重要作用。接下来&#xff0c;我们将聚焦于持续集成&#xff08;CI&#xff09;与持续交付&#xff08;CD&#xff09;&#xff0c;这是现代软件开发…...

CH32V208蓝牙内部带运放32位RISC-V工业级微控制器CH32V208CBU6、CH32V208GBU6开发板原理图和PCB

开发板 CH32V208CBU6立创格式的开发板上述链接可下载&#xff0c;官方文件进行了转换&#xff0c;使用前请仔细核对。 CH32V208CBU6原理图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208GBU6开发…...

机器臂运动控制算法工程师面试

大厂的经验总结: 一、基础概念理解 请解释机器臂运动学正解和逆解的概念,并分别说明其用途。 正解:已知机器臂各关节的角度(或位移),通过运动学模型计算出机器臂末端执行器在笛卡尔空间中的位置和姿态。用途在于可以根据给定的关节驱动值,预测末端的实际位置,用于运动…...

【一起来学kubernetes】21、Secret使用详解

Secret 的详细介绍 Secret 是 Kubernetes 中用于存储和管理敏感信息&#xff08;如密码、令牌、密钥等&#xff09;的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息&#xff0c;如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中&#x…...

Java架构师成长之路

概述 本教程主要从6个方面&#xff0c;全面讲解Java技术栈的知识。 1.性能调优 深入理解MySQL底层原理、索引逻辑&#xff0c;数据结构与算法。使用Explain进行优化分析MVCC原理剖析日志机制解析 2.框架源码 掌握Spring底层原理带你手写一个Spring解析IOC、AOP源码、以及事…...

Cyberchef实用功能之-json line格式文件美化和查询

本文将介绍一下如何使用cyberchef对json line格式数据进行美化方便阅读&#xff0c;以及json line格式数据的批量查询操作。 之前的文章介绍了json格式数据的美化和查询&#xff0c;即Cyberchef实用功能之-json解析美化和转换&#xff0c;Cyberchef实用功能之-批量提取json数据…...

span与span之间的空白如何解决?

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>标题</title> <style>div{background: yellow;}span:first-of-type{background: red;}span:last-of-type{background: blue;}</styl…...

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现&#xff1a; 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文…...

3.23学习总结

字符串 String java.lang,String 类代表字符串&#xff0c;Java程序中所有的字符串文字都为此类的对象 字符串的内容是不会发生改变的&#xff0c;它的对象在创建之后不能呗更改 字符串的内存模型 当使用双引号直接赋值时&#xff0c;系统会检查该字符串在串池中是否存在。 …...

RT-Thread CI编译产物artifacts自动上传功能介绍

近期在RT-Thread开源项目中&#xff0c;我们引入了一项实用的功能改进——将每次CI&#xff08;持续集成&#xff09;编译生成的产物&#xff08;artifacts&#xff09;自动上传到GitHub&#xff0c;方便开发者和用户能够更便捷地获取和测试最新的编译结果。 参考链接&#xf…...

Android adb调试应用程序

启动app 有的时候app不是预先安装的&#xff0c;也不能从界面start一个app&#xff0c;这时需要后台拉起app。 $adb shell am start package.name/Activity.name 例如&#xff0c;android原生camera app&#xff0c; 包名为com.android.camera2&#xff0c; mainActivity名为…...

仅靠prompt,Agent难以自救

Alexander的观点很明确&#xff1a;未来 AI 智能体的发展方向还得是模型本身&#xff0c;而不是工作流&#xff08;Work Flow&#xff09;。还拿目前很火的 Manus 作为案例&#xff1a;他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体&#xff0c;…...

【嵌入式学习2】函数

目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次&#xff0c;或者头文件嵌套包含&#xff1f; 命令行编译文件 头文件包含的…...

平芯微PW5012应用电路

PW5012应用电路板介绍&#xff1a; 1.1 单节和两节锂电池升压 12V 或 9V&#xff0c; 1A 至 3A 电路板&#xff0c; 1.2 应用&#xff1a; 升压电压转换板 1.3 VIN 输入电压&#xff1a; 3V-9V 1.4 VOUT 输出电压&#xff1a; 9V 2A&#xff08;VIN3.7V&#xff09; &#xff0…...

Langchain4J框架相关面试题

以下是关于Langchain4J框架的面试题目及答案 ### Langchain4J基础概念类 1. **Langchain4J框架是什么&#xff1f;它的核心功能有哪些&#xff1f;** Langchain4J是一个用于构建语言模型应用的Java框架&#xff0c;它为开发者提供了一套简洁高效的API&#xff0c;使得在Jav…...

【MySQL】用户管理

目录 一、用户1.1 用户信息1.2 创建用户1.3 删除用户1.4 修改用户密码1.4.1 用户修改自己密码1.4.2 root用户修改指定用户的密码 二、数据库的权限2.1 给用户授权2.2 回收用户权限 结尾 一、用户 1.1 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中。…...

5.高频加热的原理与常用集成电路介绍

一、高频加热的类型 利用高频电源加热通常由两种方法&#xff1a;电介质加热&#xff08;被加热物体绝缘&#xff09;与感应加热&#xff08;被加热物体导电&#xff09;&#xff0c;详细解释如下&#xff1a; 电介质加热&#xff08;利用高频电压的高频电场导致物体自身分子摩…...

Elasticsearch:可配置的推理 API 端点分块设置

作者&#xff1a;来自 Elastic Daniel Rubinstein Elasticsearch 开放推理 API 现已支持可配置的分块&#xff0c;以便在文档摄取时处理语义文本字段。 Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.2多头注意力扩展与掩码机制(因果掩码与填充掩码)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.2 多头注意力扩展与掩码机制(`因果掩码与填充掩码`)1. 多头注意力机制:分治策略的数学实现1.1 多头注意力核心公式2. 逐行代码实现2.1 多头拆分与合并3. 掩码机制:注意力控制的核心技术3.1 因果…...

Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化

模型评估的步骤、scikit-learn函数及实例说明 1. 数据划分&#xff08;Train-Test Split&#xff09; 函数&#xff1a;train_test_split使用场景&#xff1a;将数据分为训练集和测试集&#xff0c;避免模型过拟合。作用&#xff1a;确保模型在未见过的数据上验证性能。示例&…...

大模型量化框架GPTQModel的基本使用方法

接上一篇博客&#xff1a;AutoGPTQ报torch._C._LinAlgError: linalg.cholesky: The factorization could not be completed的解决办法-CSDN博客 如果Llama factory量化一直报错&#xff0c;可以改用其他的量化框架&#xff0c;例如GPTQ&#xff1a;https://github.com/ModelCl…...

HTTP长连接与短连接的前世今生

HTTP长连接与短连接的前世今生 大家好&#xff01;作为一名在互联网摸爬滚打多年的开发者&#xff0c;今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时&#xff0c;对这些概念一头雾水&#xff0c;希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…...

线程控制学习

1、线程创建&#xff1a; int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void*), void *arg); 参数 thread&#xff1a;返回线程ID&#xff1b;attr&#xff1a;设置线程的属性&#xff0c;attr为nullptr表示使用默认属性(一般…...

使用 Node.js 从零搭建 Kafka 生产消费系统

目录 一、Kafka 核心概念速览 二、环境准备 三、生产者实现&#xff1a;发送消息 四、消费者实现&#xff1a;处理消息 五、高级配置与最佳实践 六、常见问题解决 七、应用场景示例 总结 Apache Kafka 作为高吞吐、分布式的消息队列系统&#xff0c;在实时数据流处理中…...

【Linux系统】Linux权限讲解!!!超详细!!!

目录 Linux文件类型 区分方法 文件类型 Linux用户 用户创建与删除 用户之间的转换 su指令 普通用户->超级用户(root) 超级用户(root) ->普通用户 普通账户->普通账户 普通用户的权限提高 sudo指令 注&#xff1a; Linux权限 定义 权限操作 1、修改文…...

Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)

目录 一、安装前准备​1.版本选择依据2.​创建独立环境​ 二、详细安装步骤1.​通过conda自动安装依赖2.​手动验证依赖版本 三、补充说明1.组件依赖关系表2.常见问题解决方案​3.性能验证脚本 一、安装前准备 ​1.版本选择依据 当前最新稳定版&#xff1a;TensorFlow 2.13&a…...

Spring事务管理

介绍了事务的概念&#xff0c;事务的特性&#xff0c;JDBC 事务管理的步骤和操作过程&#xff0c;以及Spring事务管理的两种实现方式&#xff1a;编程式事务管理和声明式事务管理。 1.事务的概念 事务&#xff08;Transaction&#xff09;就是将一系列的数据库操作作为一个整体…...

避雷 :C语言中 scanf() 函数的错误❌使用!!!

1. 返回值说明 scanf函数会返回成功匹配并赋值的输入项个数&#xff0c;而不是返回输入的数据。 可以通过检查返回值数量来确认输入是否成功。若返回值与预期不符&#xff0c;就表明输入存在问题。 #include <stdio.h>int main() {int num;if (scanf("%d", …...

判断一个操作是不是允许

一、目的 简单探索一个URL请求是不是允许的。 二、具体过程 (一)系统的初始化 系统数据库有账户"admin"&#xff0c;密码是"123"。 账号"admin"的角色是管理员"manager"。 假设管理员身份设定的权限是&#xff1a; 1、对于/user/开头的…...