BWA學(xué)習(xí)筆記之utils

utils.c和utils.h里存放的是一些文件打開關(guān)閉常用函數(shù)西饵,在C語(yǔ)言標(biāo)準(zhǔn)庫(kù)的函基礎(chǔ)上增加異常檢查退出功能

這部分涉及兩個(gè)文件utils.c和utils.h, 其中utils.c還會(huì)額外導(dǎo)入ksort.h和kseq.h, 主要定義了和文件打開相關(guān)的函數(shù)

下面的函數(shù)是C自帶函數(shù)加入了異常判斷的改進(jìn)版, 對(duì)應(yīng)去掉err_前綴的函數(shù)

  • err_fwrite
  • err_fread_noeof
  • err_gzread
  • err_fseek
  • err_rewind, 封裝了 err_fseek
  • err_ftell
  • err_fprintf
  • err_printf
  • err_fputs
  • err_puts
  • err_fflush
  • err_fclose
  • err_gzclose

我們以err_fwrite為例哨坪,原函數(shù)fwrite會(huì)返回寫出的數(shù)據(jù)量大小瞳筏,如果寫出的實(shí)際大小和我們預(yù)期的大小不符合就需要跳出異常

size_t err_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t ret = fwrite(ptr, size, nmemb, stream);
    if (ret != nmemb)
        _err_fatal_simple("fwrite", strerror(errno));
    return ret;
}

異常相關(guān)函數(shù)

  • err_fatal: 異常后退出舌涨,輸出信息多 導(dǎo)致正常進(jìn)程中止
  • err_fatal_core: 異常后中止蛛株,輸出信息多蜘犁,導(dǎo)致異常的進(jìn)程中止
  • _err_fatal_simple: 異常后退出翰苫,輸出信息少, 導(dǎo)致正常進(jìn)程中止
  • _errfatal_simple_core: 異常后中止,輸出信息少这橙,導(dǎo)致異常的進(jìn)程中止
  • err_fatal_simple, 封裝了_err_fatal_simple
  • err_fatal_simple_cores 封裝了_err_fatal_simple_core
  • xassert 封裝了_err_fatal_simple_core

文件打開函數(shù)奏窑,能夠自動(dòng)處理管道輸入和輸出

  • err_xopen_core: 打開普通文件
  • err_xreopen_core: 重新打開普通文件
  • err_xzopen_core: 打開壓縮文件
  • xopen 封裝了err_xopen_core
  • xreopen 封裝了 err_xreopen_core
  • xzopen 封裝了 err_xzopen_core

我們以err_xopen_core為例

FILE *err_xopen_core(const char *func, const char *fn, const char *mode)
{
    FILE *fp = 0;
    if (strcmp(fn, "-") == 0)
        return (strstr(mode, "r"))? stdin : stdout;
    if ((fp = fopen(fn, mode)) == 0) {
        err_fatal(func, "fail to open file '%s' : %s", fn, strerror(errno));
    }
    return fp;
}

根據(jù)ksort.h里的宏初始化兩個(gè)排序函數(shù)

  • ks_introsort_64
  • ks_introsort_128

定義了兩個(gè)定時(shí)函數(shù),分別是cputime 和 realtime

此外還定義了一個(gè)哈希函數(shù),

static inline uint64_t hash_64(uint64_t key)
{
    key += ~(key << 32);
    key ^= (key >> 22);
    key += ~(key << 13);
    key ^= (key >> 8);
    key += (key << 3);
    key ^= (key >> 15);
    key += ~(key << 27);
    key ^= (key >> 31);
    return key;
}

如何在自己的項(xiàng)目中使用utils.h, 也就是替換原來的一些函數(shù)而已屈扎。

#include "utils.h"

int main(int argc, char const *argv[])
{
    FILE *fn;
    fn = xopen(argv[1], "w");
    fprintf(fn, "hell world !\n");
    err_fclose(fn);

    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末良哲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子助隧,更是在濱河造成了極大的恐慌筑凫,老刑警劉巖滑沧,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巍实,居然都是意外死亡滓技,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門棚潦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來令漂,“玉大人,你說我怎么就攤上這事丸边〉兀” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵妹窖,是天一觀的道長(zhǎng)纬朝。 經(jīng)常有香客問我,道長(zhǎng)骄呼,這世上最難降的妖魔是什么共苛? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮蜓萄,結(jié)果婚禮上隅茎,老公的妹妹穿的比我還像新娘。我一直安慰自己嫉沽,他們只是感情好辟犀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绸硕,像睡著了一般踪蹬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臣咖,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天跃捣,我揣著相機(jī)與錄音,去河邊找鬼夺蛇。 笑死疚漆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刁赦。 我是一名探鬼主播娶聘,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼甚脉!你這毒婦竟也來了丸升?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤牺氨,失蹤者是張志新(化名)和其女友劉穎狡耻,沒想到半個(gè)月后墩剖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夷狰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年岭皂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沼头。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爷绘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出进倍,到底是詐尸還是另有隱情土至,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布猾昆,位于F島的核電站陶因,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毡庆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一烙如、第九天 我趴在偏房一處隱蔽的房頂上張望么抗。 院中可真熱鬧,春花似錦亚铁、人聲如沸蝇刀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吞琐。三九已至,卻和暖如春然爆,著一層夾襖步出監(jiān)牢的瞬間站粟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工曾雕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奴烙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓剖张,卻偏偏與公主長(zhǎng)得像切诀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搔弄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容