小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

thttpd源代碼閱讀筆記 | lytsing's Blog

 北漂之鄔 2014-03-12

thttpd源代碼閱讀筆記

thttpd是一個(gè)非常小巧的輕量級(jí)web server,適合做嵌入式web服務(wù)器,它的官方網(wǎng)站是http://www./software/thttpd/ 。
thttpd的代碼量很小,大約1萬行代碼,代碼風(fēng)格好像是GNU,閱讀不太習(xí)慣,用indent格式化:indent -kr -i4 -l200 -bad -bap -ip8 *.c
由于我的vim將tab設(shè)置為4個(gè)空格,代碼中空格與tab共用,需要把tab還原為8個(gè)空格,才不出現(xiàn)排版混亂。

在fedora 12下編譯,有錯(cuò)誤:
htpasswd.c:52: error: conflicting types for 'getline'
/usr/include/stdio.h:655: error: previous declaration of 'getline' was here
htpasswd.c:52: error: conflicting types for 'getline'
/usr/include/stdio.h:655: error: previous declaration of 'getline' was here
make[1]: *** [htpasswd.o] Error 1
make[1]: Leaving directory `/home/deli/work/thttpd-2.25b/extras'
make: *** [subdirs] Error 2

原因是getline 已加入 POSIX 2008,可以把extras/htpasswd.c 里面的getline重命名為get_line或別的。

代碼根目錄下,就這幾個(gè)文件:
fdwatch.c match.c strerror.c thttpd.c
libhttpd.c mmc.c tdate_parse.c timers.c

extras子目錄兩個(gè)
htpasswd.c makeweb.c

main函數(shù)在 thttpd.c
先梳理一些基本知識(shí),看代碼就容易多了。

編寫守護(hù)進(jìn)程(daemon)遵循的一般步驟:
1. 在父進(jìn)程中執(zhí)行fork并執(zhí)行exit退出。
2. 在子進(jìn)程調(diào)用setsid。
3. 讓根目錄“/” 成為子進(jìn)程的工作目錄。
4. 把子進(jìn)程的umask變?yōu)?。
5. 關(guān)閉不必要的文件描述符。

除了上面所提的步驟,thttpd.c 跟其他服務(wù)器軟件一樣,解析參數(shù),信號(hào)的處理,讀取配置文件等。

Apache采用多進(jìn)程模型響應(yīng)用戶請(qǐng)求,thttpd對(duì)并發(fā)請(qǐng)求不使用 fork()來派生子進(jìn)程處理,采用IO多路復(fù)用解決方案。代碼在fdwatch.c/h,對(duì)select()/poll()/kqueue()進(jìn)行了封裝,也加上了超時(shí)處理機(jī)制,跟Android RIL串口多路服用的代碼非常相似。

至于socket網(wǎng)絡(luò)編程,對(duì)HTTP/1.1協(xié)議的支持,都在libhttpd.c里面處理。

注意到了兩個(gè)文本文件 mime_encodings.txt mime_types.txt,在Makefile.in里做處理,用sed格式化,生成mime_types.h,mime_encodings.h,在libhttpd.c中 再#include 進(jìn)來,這是很常見的程序設(shè)計(jì)方法,好處就是修改方便,不容易出錯(cuò)。

If you enjoyed this post, make sure you subscribe to my RSS feed!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多