目前尚没有能力直接去阅读htslib的源代码,看到bioawk的代码稍微简单点,因此准备先从这里下手,bioawk的项目地址为https://github.com/lh3/bioawk。

这次先阅读了"main.c"部分学习如何解析参数。

1-23: 版权信息部分

copyright

25: 版本信息
27: #define创建自己的常量和宏
27-35: 导入标准库的头文件和原来awk的头文件

导入标准库

37-38: extern声明后面的变量来自于其他文件,避免编译时报错

声明外部变量

49-53: 定义后续用于解析的最大程序文件数(pfile), 当前解析的程序文件(curpfile)

定义变量

62-63: setlocale设置区域相关的设置,其中LC_CTYPE 影响所有字符函数。LC_NUMERIC影响 localeconv 函数提供的小数点格式化和信息

区域相关设置

65:获取程序的名字
66-70:如果参数只有一个,也就是只输入程序名,那么就用fprintf将信息格式化输出的标准错误输出(stderr),也就是你可以用bioawk 2> err.log而不是bioawk > err.log报错报错信息。

判断

78:使用while语句开始解析参数。 argv[1][0] == '-' &&argv[1][1] != '\0' 表示第二个C语言接受的第二个参数是-, --开头的参数

解析参数

79-83:使用string.h的strcmp进行文本比较,如果输入是 "-version" 或者是 "--version" 则输出版本信息,其中version在第25行定义。 strcmp返回0表示比较的内容相同,否则都是不相同。最后用break跳出循环

版本参数

84-88: 使用string.h的strncmp比较两个字符串的最多n个字符。 也就是说,你可以用bioawk -c fastx ------------ '{printf $seq’ xxxx.fa 这种无聊的操作. 后续的argc--argv--对当前解析的参数位置进行移动,就能读取到后面的参数了。

显示声明参数结尾

89: 开始用switch解析短参数

90-93:用strcmp判断是否是 -safe,是的话就将safe赋值为1,最后跳出switch,

第一个判断

167-168:跳出switch之后,--argc++argv进行参数偏移,也就是读取下一个参数

跳出循环

94-107: 处理program文件。将文件名存放到pfile(字符串数组),也就是将文件名开头的字符的地址( &argv[1][2])存放到pfile数组中。这里考虑有两种习惯,一种是-fsomefile,另一种是-f samefile, 其中后者需要对输入参数进行偏移。

处理program文件

108-123:处理分隔符。同样考虑到-F"\t和-F t这两种情况

image.png

124-126:使用string.h的strcpy进行文本复制。

复制字符串

144-149: 使用stdlib.h的atoi函数将字符串转成数值。这里发现如果用bioawk -d 0就会进行调试模式哦,这和原本awk -d是不同的。

调试功能

153-162:对格式进行解析。

选择格式

读源码学C之阅读李恒的bioawk相关推荐

  1. 读源码学算法之Monte Carlo Tree Search

    最近研究新的算法有使用到Monte Carlo Tree Search,查了一些资料,参考几篇博客: 1.知乎:蒙特卡洛树搜索最通俗入门指南 2.知乎:AlphaGo背后的力量:蒙特卡洛树搜索入门指南 ...

  2. 读源码:PopupWindow

    读源码是为了了解并学习它的实现机制,并更好的运用它,如果在读源码之前已经知道它的怎么运用,这将会更容易理解源码.所以在这读源码开头我推荐阅读一下一位大神写的相关博文,浅显易懂,条理清晰: PopUpW ...

  3. 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码

    阅读是最好的老师 在学习和提升编程技术的时候,通过阅读高质量的源码,来学习专家写的高质量的代码,是一种非常有效的提升自我的方式.程序员群体是一群乐于分享的群体,因此在互联网上有大量的高质量开源项目,阅 ...

  4. 我是怎么读源码的,授之以渔

    点击上方"视学算法",选择"设为星标" 做积极的人,而不是积极废人 作者 :youzhibing 链接 :https://www.cnblogs.com/you ...

  5. 读源码,对程序员重要吗?

    来源: CSDN(ID:CSDNnews) 嘿,朋友们!本文我将分享一些关于主动阅读和研究源码的一些想法.在我看来,阅读源码能够帮你成为一名更专业的开发人员.毫无疑问的是,阅读源码提高了我的软件开发水 ...

  6. 学会读源码,很重要!

    刚参加工作那会,没想过去读源码,更没想过去改框架的源码:总想着别人的框架应该是完美的.万能的,应该不需要改:另外即使我改了源码,怎么样让我的改动生效了?项目中引用的不还是没改的jar包吗.回想起来觉得 ...

  7. 杂谈篇之我是怎么读源码的,授之以渔

    前言 开心一刻 今天上课不小心睡着了,结果被老师叫起来回答问题,这是背景.无奈之下看向同桌寻求帮助,同桌小声说到选C,结果周围的人都说选C,向同桌投去一个感激的眼神后大声说道选C.刚说完教室就笑开了, ...

  8. 这样读源码,不牛X也难

    程序员在工作过程中,会遇到很多需要阅读源码的场景,比如技术预研.选择技术框架.接手以前的项目.review他人的代码.维护老产品等等.可以说,阅读源代码是程序员的基本功,这项基本功是否扎实,会在很大程 ...

  9. 带着问题读源码-soul(2021-01-16)

    ### 带着问题读源码系列之Dubbo插件 像往常一样启动 [soul-admin] 和 [soul-bootstrap] . 因为dubbo需要依赖zookeeper, 需要需要启动一个监听在 lo ...

最新文章

  1. 安全研究 | Jenkins 任意文件读取漏洞分析
  2. .NET DLR 上的IronScheme 语言互操作IronScheme控制台输入中文的问题
  3. Boost:bind绑定全局占位符的测试程序
  4. oracle带输出参数存储,oracle带输入输出参数存储过程(包括sql分页功能)
  5. SAP Analytics Cloud里的Smart Discovery功能介绍
  6. 边缘检测之Canny
  7. Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件
  8. 每日小记2017.9.4
  9. 【SQL】血缘解析 SQL parser 工具介绍
  10. neo4j limit
  11. [设计模式]单例模式
  12. python xy不在第一维度_ValueError:x和y必须具有相同的第一个维度ipython 3.5
  13. Matlab R2019a Win64位 迅雷下载链接
  14. Navicat删除注册表
  15. vue h5项目集成环信webIM超详细步骤,附代码注释讲解
  16. ios审核要注意的地方(转)
  17. thrift/swift/nifty:获取客户端ip的简单方法
  18. autodesk fbx sdk sample里面的工程无法调试解决方法
  19. EXCEL如何使用查找函数vlookup
  20. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))

热门文章

  1. Geotools简介以及quickstsrt加载shp文件并显示
  2. ProtoBuf在使用protoc进行编译时提示: Required fields are not allowed in proto3
  3. MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用
  4. Vue实现仿音乐播放器12-实现歌手页面效果
  5. SpringMVC的常用注解
  6. JavaScript入门【JavaScript专题1】
  7. Dart对列表进行排序
  8. 监理单位的组织与规划
  9. mysql实现树形_Mysql实现树形递归查询
  10. 企服创业必修课丨神策数据与红杉中国联合发布规模化营销获客体系建设指南...