日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读源码学C之阅读李恒的bioawk

發(fā)布時間:2025/3/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读源码学C之阅读李恒的bioawk 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前尚沒有能力直接去閱讀htslib的源代碼,看到bioawk的代碼稍微簡單點,因此準備先從這里下手,bioawk的項目地址為https://github.com/lh3/bioawk。

這次先閱讀了"main.c"部分學習如何解析參數(shù)。

1-23: 版權(quán)信息部分

copyright

25: 版本信息
27: #define創(chuàng)建自己的常量和宏
27-35: 導(dǎo)入標準庫的頭文件和原來awk的頭文件

導(dǎo)入標準庫

37-38: extern聲明后面的變量來自于其他文件,避免編譯時報錯

聲明外部變量

49-53: 定義后續(xù)用于解析的最大程序文件數(shù)(pfile), 當前解析的程序文件(curpfile)

定義變量

62-63: setlocale設(shè)置區(qū)域相關(guān)的設(shè)置,其中LC_CTYPE 影響所有字符函數(shù)。LC_NUMERIC影響 localeconv 函數(shù)提供的小數(shù)點格式化和信息

區(qū)域相關(guān)設(shè)置

65:獲取程序的名字
66-70:如果參數(shù)只有一個,也就是只輸入程序名,那么就用fprintf將信息格式化輸出的標準錯誤輸出(stderr),也就是你可以用bioawk 2> err.log而不是bioawk > err.log報錯報錯信息。

判斷

78:使用while語句開始解析參數(shù)。 argv[1][0] == '-' &&argv[1][1] != '\0' 表示第二個C語言接受的第二個參數(shù)是-, --開頭的參數(shù)

解析參數(shù)

79-83:使用string.h的strcmp進行文本比較,如果輸入是 "-version" 或者是 "--version" 則輸出版本信息,其中version在第25行定義。 strcmp返回0表示比較的內(nèi)容相同,否則都是不相同。最后用break跳出循環(huán)

版本參數(shù)

84-88: 使用string.h的strncmp比較兩個字符串的最多n個字符。 也就是說,你可以用bioawk -c fastx ------------ '{printf $seq’ xxxx.fa 這種無聊的操作. 后續(xù)的argc--與argv--對當前解析的參數(shù)位置進行移動,就能讀取到后面的參數(shù)了。

顯示聲明參數(shù)結(jié)尾

89: 開始用switch解析短參數(shù)

90-93:用strcmp判斷是否是 -safe,是的話就將safe賦值為1,最后跳出switch,

第一個判斷

167-168:跳出switch之后,--argc 和 ++argv進行參數(shù)偏移,也就是讀取下一個參數(shù)

跳出循環(huán)

94-107: 處理program文件。將文件名存放到pfile(字符串數(shù)組),也就是將文件名開頭的字符的地址( &argv[1][2])存放到pfile數(shù)組中。這里考慮有兩種習慣,一種是-fsomefile,另一種是-f samefile, 其中后者需要對輸入?yún)?shù)進行偏移。

處理program文件

108-123:處理分隔符。同樣考慮到-F"\t和-F t這兩種情況

image.png

124-126:使用string.h的strcpy進行文本復(fù)制。

復(fù)制字符串

144-149: 使用stdlib.h的atoi函數(shù)將字符串轉(zhuǎn)成數(shù)值。這里發(fā)現(xiàn)如果用bioawk -d 0就會進行調(diào)試模式哦,這和原本awk -d是不同的。

調(diào)試功能

153-162:對格式進行解析。

選擇格式

總結(jié)

以上是生活随笔為你收集整理的读源码学C之阅读李恒的bioawk的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。