51、【OS】【Nuttx】【OSTest】参数解析:参数处理过程
背景
接上两篇 blog:
49、【OS】【Nuttx】【OSTest】参数解析:测试项
50、【OS】【Nuttx】【OSTest】参数解析:函数定义
getopt_common
来看 getopt_common 的实现过程
- 首先校验输入参数是否为空,如果没有输入参数,则没必要进行解析,这里应该用卫语句来进行校验,可以减少圈复杂度;另外,这里判断 go_optind 是否小于 1 有点多余,因为首先没看到程序中有对 go_optind 进行清零操作的地方,其次 go_binitialized 在参数解析结束时会自动设置为 false,用 go_binitialized 对是否需要初始化判断已经足矣。
- 初始化完之后,接下来判断是否正在进行一个新的选项解析,上篇 blog 提到 go_optptr 为内部指针,指向当前正在解析的选项字符串的字符位置,如果 go_optptr 为空,说明此时为首次进行参数解析,如果 *go_optptr 为 \0,说明当前的选项已经解析完,可以开始下一个选项的解析
- 如果 go_optptr 不为空,说明不是首次解析,此时由于 *go_optptr 为 \0,说明当前选项已经解析完,开始执行下一选项解析(go_optind++)
- 如果索引超出选项个数 argc,则参数解析结束;或者发现选项中第一个字符不是 ‘-’,参数解析也结束,因为语法不对
- 如果选项没解析完,且语法也正确,则跳过第一个字符 ‘-’,进行后续字符的解析
特殊处理只有一个 ‘-’ 或者 ‘-:’ 的情况,这两种都属于异常情况,解析模块需要跳过异常选项,进行下一轮解析
检查是否为长选项解析模式,这里 long_mode 和 long_only_mode 都会进入该分支,如果下一个字符也是 ‘-’,说明为 long_mode,跳过字符 ‘-’,进行长选项解析 getopt_long_option
从 getopt_mode_e 类型定义可以看到,long_mode 和 long_only_mode 都有 GETOPT_LONG_BIT
如果不是 long_mode,接下来判断是不是 long_only_mode,如果为 long_only_mode,进行长选项解析 getopt_long_option,如果遇到未识别的长选项(可能是选项不匹配,或者选项的参数不匹配),将跳过该选项,进行下一轮选项解析
进行完长选项解析后,再进行短选项解析,这里如果 optstring(合法短选项)为空,在长选项模式中,将跳过该选项,进行下一轮选项解析;如果是短选项模式,将直接结束参数解析(因为没有合法的短选项进行参考)
- 首先看 optstring (合法短选项)第一个字符是不是冒号,如果是冒号,说明前面还少了一个选项参数,并跳过这个冒号
- optstring 的类型为 const char *,解引用后得到的是一个字符,而非字符串
- strchr 判断该选项是否为合法字符串,如果 optchar 为空,说明该选项为非法选项,将跳过该选项进行下一轮选项解析
- optchar[0] 为合法短选项,接下来看 optchar[1] 是不是冒号,如果非冒号,说明该选项不带参数
- 如果为冒号,首先正常情况下,选项和选项所带的参数是分开的,比如选项 -a 是 argv[0],但选项 -a 带的参数在 argv[1],那么解析完该选项及其参数,需要两轮解析,也就是调用 getopt_common 两次
- 这里考虑了一种特殊的情况,选项和参数混在一起,此时,从理论上,解析完这个选项参数,只需要一轮,也就是这里的条件分支,但实际上很少有人这么用,所以这里先不考虑这种场景
如果下一个待解析项不是 ‘-’ 开头,那么默认它为该选项的参数,此时返回该参数出去,optind 索引增加 2(选项 + 参数),否则就是不带参数,此时根据该选项参数是不是必须的,决定是返回该选项,还是 ‘?’
相关文章:
51、【OS】【Nuttx】【OSTest】参数解析:参数处理过程
背景 接上两篇 blog: 49、【OS】【Nuttx】【OSTest】参数解析:测试项 50、【OS】【Nuttx】【OSTest】参数解析:函数定义 getopt_common 来看 getopt_common 的实现过程 首先校验输入参数是否为空,如果没有输入参数࿰…...
python实现基于Windows系统计算器程序
Python实现Windows系统计算器程序(含高级功能) 下面我将介绍如何使用Python创建一个功能完整的Windows风格计算器程序,包含基本运算和高级数学功能。 1. 使用Tkinter实现基础计算器 import tkinter as tk from tkinter import ttk import …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません &(~た・~ない)ほうがいいです 1、前言(1)情况说明(2)工程师…...
AI Rack架构高速互连的挑战:损耗设计与信号完整性的设计框架
在AI驱动的时代,系统设计已经从单一PCB的视角,逐步转向以整个rack为单位来考量。 对于信号完整性而言,焦点以不再局限于单一PCB上的损耗,而是扩展到芯片与芯片之间的端到端互连损耗(end-to-end interconnect loss&…...
React useCallback函数
应用场景:父组件向子组件传递函数类型的props时...
【CTFer成长之路】XSS的魔力
XSS闯关 level1 访问url: http://c884a553-d874-4514-9c32-c19c7d7b6e1c.node3.buuoj.cn/level1?usernamexss 因为是xss,所以对传参进行测试,修改?username1,进行访问 会发现username参数传入什么,welcome之后就…...
多模态RAG演进-MRAG1.0->MRAG2.0->MRAG3.0
MRAG1.0 MRAG1.0是MRAG框架的初始阶段,通常被称为“伪MRAG”。它是对RAG范式的简单扩展,支持多模态数据。MRAG1.0通过利用现有的基于文本的检索和生成机制,实现了从RAG到MRAG的平稳过渡。 MRAG1.0的架构包括三个关键组件: 文档解…...
超预期!淘宝闪购提前开放全国全量,联合饿了么扭转外卖战局
饿了么由守转攻。 作者|景行 编辑|杨舟 淘宝饿了么,终于落子,“淘宝闪购”,横空出世,仅仅2天,业务加速。 4月30日上午,当外卖战场陷入沉寂时,淘宝宣布将即时零售业务“小时达”升级为“淘宝闪…...
Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
背景: PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一…...
算法技巧——打表
什么是打表? 打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得一个有序表或常量表,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的…...
JavaScript基础-逻辑运算符
在JavaScript编程中,逻辑运算符用于判断表达式的真假,并根据结果执行特定的操作。掌握逻辑运算符是理解条件控制结构的关键之一。本文将详细介绍JavaScript中的三种主要逻辑运算符:&&(逻辑与)、||(…...
P20:Inception v3算法实战与解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 使用InceptionV3实现天气识别 一、模型结构 Inception v3是Google团队在2015年提出的第三代Inception模型,属于卷积神经网络(CNN&…...
C++ - 数据容器之 list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
一、创建与初始化 引入 <list> 并使用 std 命名空间 #include <list>using namespace std;创建一个空 list list<int> my_list;创建一个包含 5 个元素,每个元素初始化为 0 的 list list<int> my_list(5);创建一个包含 5 个元素…...
deepseek 技巧整理
1、导出word 和excel 功能,在使用以下提示词。 请帮我列出减肥期间可以吃的水果,并分析该水果含有的营养元素,以表格的形式星现。1.要以html的方式输出 2.要可以直接运行 3.页面要提供可以直接下载word和excel功能...
柔性PZT压电薄膜多维力传感器在微创手术机器人的应用
随着医疗技术的迅速发展,微创手术机器人正在成为外科手术的重要助手。与传统开放式手术相比,微创手术创伤小、恢复快、感染率低,对手术器械的精细操控性和感知能力提出了更高要求。多维力传感器作为机器人“触觉”的核心部件,对提…...
Java学习手册:Spring Boot 自动配置与快速开发
一、Spring Boot 自动配置概述 Spring Boot 的自动配置是其核心特性之一,它能够根据项目的依赖和配置自动地进行 Spring 应用程序的配置。自动配置的工作流程如下: SpringBootApplication 注解 :这是自动配置的起点,它是一个组合…...
ValueError: expected sequence of length 8 at dim 2 (got 0)
问题描述 在PyCharm中使用强化学习运行Python代码时报错ValueError: expected sequence of length 8 at dim 2 (got 0)。 问题原因 实际上原因就是gym中的env对象的reset、step等方法的返回值作了改动 解决方法 1、第一步: 将代码块中的(记得改的需…...
AI赋能新媒体运营:效率提升与能力突破实战指南
AI赋能新媒体运营:效率提升与能力突破实战指南 在信息爆炸的新媒体时代,运营人员面临着内容产出压力大、数据分析复杂、用户互动需求高等多重挑战。AI技术的迅猛发展为新媒体运营带来了革命性的变革可能。本文将为您揭示如何利用AI工具提升工作效率、培…...
单词规律(简单)
思路和同构字符串那道题一样。、但是这道题要注意的地方就是,检查 pattern 和 s 的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较,而不能用“!”,“!”比较的是对象引用而非内容。 class Soluti…...
QGraphicsView QGraphicsScene QGraphicsItem 的关系
在Qt的图形视图框架中,QGraphicsView、QGraphicsScene和QGraphicsItem 三者协同工作,构成一个分层的结构,用于高效管理和显示复杂的图形界面。以下是它们的关系和职责的详细说明: 1. 核心角色 类名职责类比QGraphicsItem场景中的…...
re题(52)BUUCTF-[FlareOn5]Minesweeper Championship Registration
BUUCTF在线评测 jadx打开if条件就是flag...
c++环境和vscode常用的一些有用插件
环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…...
UE自动索敌插件Target System Component
https://www.fab.com/zh-cn/listings/9088334d-3bde-4e10-a937-baeb780f880f 一个完全用 C 编写的 UE插件,添加了对简单相机锁定/瞄准系统的支持。它最初在蓝图中开发和测试,然后转换并重写为 C 模块和插件。 特征: 可通过一组可在…...
从括号匹配看栈:数据结构入门的实战与原理
在计算机科学的世界里,数据结构是程序员的 “瑞士军刀”,不同的数据结构适用于不同的场景,能高效解决各类问题。其中,栈作为一种简单却强大的数据结构,在很多实际应用中发挥着关键作用。今天,我们就通过一个…...
ReLU函数及其Python实现
ReLU函数及其Python实现 文章目录 ReLU函数及其Python实现1. ReLU函数定义2. Python实现3. 在深度学习中的应用总结 1. ReLU函数定义 ReLU(Rectified Linear Unit,修正线性单元)函数是深度学习中常用的激活函数之一。它的定义非常简单&#…...
Rain World 雨世界 [DLC 解锁] [Steam Epic] [Windows SteamOS]
Rain World 雨世界 [DLC 解锁] [Steam & Epic] [Windows & SteamOS] 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明…...
n8n 工作流画布上下左右移动的操作方法
n8n 工作流画布上下左右移动的操作方法 1. n8n 工作流画布上下移动2. n8n 工作流画布左右移动3. n8n 工作流画布扩大和缩小4. n8n 工作流画布缩放到适合 1. n8n 工作流画布上下移动 鼠标滚轮向上滚动是向上移动鼠标滚轮向下滚动是向下移动 2. n8n 工作流画布左右移动 按照Shi…...
Linux 常用命令合集
一、用户权限管理 切换管理员身份 sudo su:普通用户临时获取 root 权限,需输入当前用户密码。管理员提示符:root主机名:路径#。退出管理员:exit,返回普通用户状态。 以管理员身份执行命令 sudo 命令 参数:…...
B站Michale_ee——ESP32_IDF SDK——FreeRTOS_7 流数据缓冲区、消息缓冲区
一、Stream Buffer流数据缓冲区 流数据缓冲区用来处理像音频之类的流数据; 1.API简介 (1)创建流数据缓冲区 (2)向流数据缓冲区中发送数据 (3)从流数据缓冲区中接收数据 2.示例代码及运行结果…...
HCL(HashiCorp Configuration Language)是一种结构化配置语言
HCL(HashiCorp Configuration Language)是一种结构化配置语言,语法简洁且可读性强,广泛用于 Docker Buildx Bake、Terraform、Nomad 等工具的配置。以下是其核心语法规则和示例: 1. 基础结构 HCL 使用 块(…...
k9s 一个基于终端的 Kubernetes 集群管理工具(TUI)
k9s 是一个基于终端的 Kubernetes 集群管理工具(TUI),通过快捷键和交互式命令快速操作资源。以下是其核心用法和常见场景: 1. 基本命令 启动 k9s k9s # 默认连接当前 kubeconfig 配置的集群k9s -n <namespace> # 指定命…...
高等数学-第七版-下册 选做记录 习题10-1
1. 4. 5....
DBeaver连接人大金仓数据库V9
1、官网下载驱动jdbc 打开官网地址,找到下面的V9R1-JDBC,点击后面的下载即可,保存到本地 2、解压最新版的驱动程序 3、把***_JDBC文件夹内的驱动程序复制到DBeaver安装目录下的plugins文件夹里 4、打开dbeaver程序,增加kingbase…...
跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?!
跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?! 文章目录 一、事务的基本操作1. 开启事务2. 执行事务内操作3. 提交事务4. 回滚事务 二、验证示例(适用于 MySQL 5.7)步骤 1:准备测试表和数据步骤 2:…...
【KWDB 创作者计划】利用KWDB解决工业物联网场景中的海量数据管理难题的思考
利用KWDB解决工业物联网场景中的海量数据管理难题 一、什么是KWDB?二、工业物联网场景中的数据管理痛点2.1 数据量大且增长迅速2.2 数据多样性2.3 实时性需求2.4 数据分析复杂性 三、KWDB 的技术优势与架构解读3.1 时间序列数据的高效管理3.2 高吞吐写入性能3.3 灵活…...
分享国产AI工作流集成数据库完成业务处理
在现代企业应用中,业务流程的自动化和数据管理是提高效率的关键。Taskflow 作为一个强大的任务流管理工具,可以通过集成数据库实现复杂业务逻辑的处理。本文将分享如何利用 Taskflow 集成数据库,优化业务流程,并展示一个实际案例。…...
【每日八股】复习 Redis Day5:集群(上)
文章目录 复习昨日内容缓存雪崩、击穿、穿透的问题描述及解决方案如何保证数据库和缓存的一致性普通方案进阶方案 如何保证缓存删除一定成功?针对业务一致性要求高的场景,如何确保缓存与数据库的一致性?如何避免缓存失效?如何实现…...
linux进程的复制和替换
Linux 进程的复制与替换 一、主函数参数 在 C 语言里,main 函数能够接收参数,其标准形式如下: int main(int argc, char* argv[], char* envp[]);argc:代表命令行参数的数量,为整数类型。argv:是一个字符…...
【质量管理】现代TRIZ问题识别中的功能分析——相互接触分析
在文章【质量管理】现代TRIZ中问题识别中的功能分析——组件分析-CSDN博客中我们知道了如何对产品进行组件分析,那么组件分析出来有什么作用呢?组件分析就是为了接下来相互接触分析使用的。 什么是相互接触 相互接触分析是功能分析的一部分,…...
一种快速计算OTA PSRR的方法(Ⅱ)
1.仿真验证 1.1仿真设置 1.1.1 Test-bench原理 1.1.2 管子参数设置 为了公平地比较性能,设置所有OTA 的输入晶体管M1和M2为相同的gm和偏置电流1uA。 具体晶体管宽长比设置参见5.参考资料中的论文2。 1.2仿真验证 1.2.1 CM OTA 1)小信号参数 M1 M…...
【C++】通过红黑树封装map和set
前言: 通过之前的学习,我们已经学会了红黑树和map、set。这次我们要实现自己的map和set,对,使用红黑树进行封装! 当然,红黑树内容这里就不在赘述,我们会复用红黑树的代码,所以先将…...
【Java IO流】字节输入流FileInputStream、字节输出流FileOutputStream
目录 0.前言 1.FileInputStream 1.1 概述 1.2 构造方法 1.3 成员方法 1.4 FileInputStream读取文件案例演示 2.FileOutputStream 2.1 概述 2.2 构造方法 2.3 成员方法 2.4 写入文本文件案例演示 3.FileInputStream FileOutputStream拷贝文件 0.前言 本文讲解的是…...
信息收集新利器:SSearch Chrome 插件来了
SSearch 下载地址 SSearch 😣用途 每次谷歌语法搜索时还得自己写,我想省事一点,弄了一个插件,先加了几个常用的语法,点击后会跳转到对应搜索页面,也可以直接在搜索框微调 后续也会加些其他语法 &#…...
【AI面试准备】AI误判案例知识库优化方案
面试题:建立内部知识库:收集AI误判案例训练领域专属模型。 在回答关于“建立内部知识库收集AI误判案例训练领域专属模型”的面试问题时,建议从以下结构化框架展开,既能体现专业性,又能展现解决问题的系统性和实际落地…...
从零开始讲DDR(8)——AXI 接口MIG 使用(1)
一、前言 在之前的系列文章中,我们已经讨论过了MIG ip的接口内容,配置方式和modelsim独立仿真相关的内容,因此,本文对于之前已经讨论过的相关内容只做简单描述,着重介绍AXI 接口MIG使用上与普通ui接口的不同之处。感兴…...
字符和编码(python)
位数:英文字符使用 1 个字节表示,中文字符通常使用 3 个字节。示例:汉字 “汉” 的 UTF-8 编码是 \xE6\xB1\x89。优点:兼容 ASCII,广泛用于网络传输和文件存储。 Python 中的字符串类型 在 Python 中,字…...
【STM32】定时器输入捕获
STM32 定时器输入捕获功能笔记 一、什么是输入捕获(Input Capture) 输入捕获是利用定时器的输入通道,在检测到信号电平变化(如上升沿或下降沿)时,立即将当前计数器的值捕获并保存到捕获寄存器(…...
spring-ai集成langfuse
1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…...
SALOME源码分析: ParaVis
本文分析SALOME中ParaVis模块。 注1:限于研究水平,分析难免不当,欢迎批评指正。注2:文章内容会不定期更新。 一、核心组件 二、关键流程 三、FAQs 网络资料 SALOME Scientific visualisationPARAVIS Module - Architecture …...
Ubuntu 安装 MySQL8
在 Ubuntu 下安装 MySQL 服务,推荐使用 apt install 官方的 APT 仓库安装方式,这种方式最安全、最稳定、能自动处理依赖关系,也支持后续升级。不推荐在官网手动下载 .deb 包的方式。 配置 Ubuntu 服务器 1. 确认 Ubuntu 系统版本 使用如下命…...