C/C++程序员必须熟悉的开源库
在日常的開發(fā)中, 作為一個程序員, 很多東西已經(jīng)沒有必要再重新開發(fā)了, 可以直接拿過來使用, 畢竟21世紀都已經(jīng)過了N年了。我們沒有必要重新發(fā)明輪子(不可否認發(fā)明輪子的過程可以學到很多東西,我就是這么走過來的)。
下面結(jié)合自己多年的開發(fā)經(jīng)驗, 想到哪里寫到哪里, 希望對新人有一定的幫助。
一、網(wǎng)絡
網(wǎng)絡庫必須掌握 ACE 和 libevent, 一個是重量級的網(wǎng)絡庫, 一個是輕量級的網(wǎng)絡庫。仔細想想,現(xiàn)在那個程序不用網(wǎng)絡啊。不懂網(wǎng)絡, 你將寸步難行啊。 熟悉這兩個開源庫的前提是你必須懂socket的原理, 給大家推薦的好書就是 《UNIX網(wǎng)絡編程》,看懂這本書就可以了, 其他的什么《windows網(wǎng)絡編程》這些都不用看, 因為網(wǎng)絡編程,你學會了伯克利的套接字, 你就可以在任何平臺上進行網(wǎng)絡編程了, 不需要學什么windows下的網(wǎng)絡編程, 因為windows下的網(wǎng)絡也是從伯克利套接字搞過來的, 如果你學習《windows網(wǎng)絡編程》, 那么你那天在linux,unix下進行網(wǎng)絡編程,你還得在學習一下。沒有那個必要。
二、數(shù)據(jù)庫
數(shù)據(jù)庫嘛, 開源的Mysql和開源的PostgreSQL只要懂其中一個就可以了, 商業(yè)數(shù)據(jù)庫在掌握一個Oracle就可以了,文件數(shù)據(jù)庫掌握 sqlite。?不過請大家注意, 不要被上面數(shù)據(jù)庫名字給迷惑了, 數(shù)據(jù)庫的本質(zhì)是SQL語句, 一定要懂數(shù)據(jù)庫的基本原理,熟練應用SQL語言,懂數(shù)據(jù)庫的優(yōu)化,存儲過程等。數(shù)據(jù)庫的原理搞懂了, 拿什么數(shù)據(jù)庫過來都輕松掌握, 就不會在乎是Mysql還是Oracle了。
三、日志操作
日志操作推薦大家熟悉 log4cpp這個日志庫, 支持多線程, 日志重定向到網(wǎng)絡等都有, 反正你能想到的日志的功能, 都有。
日志嘛,一個是方便查找問題, 方便記錄程序運行的一些情況。這是必須的。
四、管理后臺
眾所周知, 寫程序是給其他人用的,不是自己用, 所以在程序的易用性上,多給對方提供一些可以直接查看的管理界面, 顯得分成重要。為程序提供一個web的管理界面,方便用戶登錄上去查看程序的各種信息, 很有必要。
我這里有一個方便的web后臺管理的http實現(xiàn), 可以方便的集成到應用程序中。在IE里面輸入監(jiān)聽的端口,就可以查看程序的狀態(tài)。代碼還沒有仔細整理。有需要的弟兄可以給我留言, 給大家發(fā)。
五、讀取配置文件
所有的程序都必須有配置文件, 方便配置一些項目, 為程序提供靈活性。 所以寫程序,必須有讀取配置文件的封裝類。
六、內(nèi)存池
所有的進程都需要分配內(nèi)存, 對C/C++來說, 分配和管理內(nèi)存是已經(jīng)很有挑戰(zhàn)性的工作。
給大家推薦 nedmalloc 這個開源的內(nèi)存池庫。nedmalloc是一個跨平臺的高性能多線程內(nèi)存分配庫,很多庫都使用它。
七、緩存庫
眾所周知, 緩存庫用得最多的就是 memcache 了。在做數(shù)據(jù)庫開發(fā)的時候特別有用。
八、腳本
腳本是一個很有意思的東西,很多功能,其實我們只要寫個腳本就可以完成,代碼量少,開發(fā)速度快。
必須掌握的腳本,比較通用的要算 perl 了, 很古老的語言,但是功能太強大了。?我可以保證的說,.net,java能干的工作,肯定可以讓perl來干。 C能干的, perl不一定能干。 perl作為linux, unix的系統(tǒng)集成的腳本語言,必須學會。
lua 語言, 這個語言, 在游戲行業(yè)用得比較多。不推薦學。
python 腳本, 功能很強大, 推薦學。
九、文件系統(tǒng)
Linux下開源的文件系統(tǒng)真的挺多,EXT2/3/4,XFS,JFFS2還有最近火爆的Hadoop,Openstack等等。
SQLite
SQLite是一款輕型的數(shù)據(jù)庫。它的設計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內(nèi)存就夠了。
源碼地址:http://www.sqlite.org/
libnet
libnet是一個小型的接口函數(shù)庫,主要用C語言寫成,提供了低層網(wǎng)絡數(shù)據(jù)包的構(gòu)造、處理和發(fā)送功能。libnet的開發(fā)目的是:建立一個簡單統(tǒng)一的網(wǎng)絡編程接口以屏蔽不同操作系統(tǒng)底層網(wǎng)絡編程的差別,使得程序員將精力集中在解決關(guān)鍵問題上
源碼地址:https://github.com/sam-github/libnet
libjpeg
libjpeg是一個完全用C語言編寫的庫,包含了被廣泛使用的JPEG解碼、JPEG編碼和其他的JPEG功能的實現(xiàn)。
源碼地址:http://sourceforge.net/projects/libjpeg/files/
libevent
Libevent 是一個用C語言編寫的、輕量級的開源高性能網(wǎng)絡庫,主要有以下幾個亮點:事件驅(qū)動( event-driven),高性能;輕量級,專注于網(wǎng)絡,不如 ACE 那么臃腫龐大;源代碼相當精煉、易讀;跨平臺,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多種 I/O 多路復用技術(shù), epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定時器和信號等事件;注冊事件優(yōu)先級。
源碼地址:https://github.com/nmathewson/Libevent
libcurl
libcurl主要功能就是用不同的協(xié)議連接和溝通不同的服務器。 libcurl當前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協(xié)議。libcurl同樣支持HTTPS證書授權(quán),HTTP POST, HTTP PUT, FTP 上傳(當然你也可以使用PHP的ftp擴展), HTTP基本表單上傳,代理,cookies,和用戶認證。
源碼地址:http://curl.haxx.se/
libiconv
libiconv庫為需要做轉(zhuǎn)換的應用提供了一個iconv()的函數(shù),以實現(xiàn)一個字符編碼到另一個字符編碼的轉(zhuǎn)換。libiconv在系統(tǒng)缺少多種多樣的字符編碼支持時,提供這樣方面的支持。
源碼地址:http://www.gnu.org/software/libiconv/
mcrypt/libmcrypt
一個功能強大的加密算法擴展庫,在保證應用的應用性時,通過該擴展庫的加密算法保證安全性
源碼地址:http://mcrypt.sourceforge.net/
libpng
libpng可用于讀寫png文件
源碼地址:http://libmng.com/pub/png/libpng.html
freetype
FreeType庫是一個完全免費(開源)的、高質(zhì)量的且可移植的字體引擎,它提供統(tǒng)一的接口來訪問多種字體格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持單色位圖、反走樣位圖的渲染。FreeType庫是高度模塊化的程序庫,雖然它是使用ANSI C開發(fā),但是采用面向?qū)ο蟮乃枷?#xff0c;因此,FreeType的用戶可以靈活地對它進行裁剪。
源碼地址:http://www.freetype.org/
jpegsrc
包含jpeg庫,這些庫用于讀寫jpeg文件
源碼地址:http://ijg.org/
libxml2
libxml是linux平臺下解析XML文件的一個基礎庫,現(xiàn)在很多實用軟件都用XML格式的配置文件,所以也有必要學習一下。
源碼地址:http://www.xmlsoft.org/
zlib
zlib 是一個壓縮解壓程序庫
源碼地址:http://www.zlib.net/
D-Bus
D-Bus是一個為應用程序間通信的消息總線系統(tǒng), 用于進程之間的通信。
源碼地址:http://www.freedesktop.org/wiki/Software/dbus/
pureftpd、bftpd、vsftpd
PureFTPd是一款專注于程序健壯和軟件安全的免費FTP服務器軟件。源碼地址:http://www.oschina.net/p/pure-ftpd
vsftpd是一款在Linux發(fā)行版中最受推崇的FTP服務器程序。特點是小巧輕快,安全易用。源碼地址:http://vsftpd.beasts.org/http://www.oschina.net/p/vsftpd
Bftpd 主旨成為一款高速、小巧而且配置方便的服務器 源碼地址:http://sourceforge.net/projects/bftpd/files/bftpd/bftpd-3.2/bftpd-3.2.tar.gz/download
tinyhttpd、mini_httpd、Lighttpd、apache、nginx
tinyhttpd 是一個不到 500 行的超輕量型 Http Server,用來學習非常不錯,可以幫助我們真正理解服務器程序的本質(zhì)。源碼地址:http://sourceforge.net/projects/tinyhttpd/
mini_httpd是一個小型的HTTP Server,功能豐富,作為嵌入式系統(tǒng)的server性能很不錯,唯一的不好的地方是代碼風格不是很好。源碼地址:http://www.acme.com/software/mini_httpd/
Lighttpd是一個具有非常低的內(nèi)存開銷,cpu占用率低,效能好,以及豐富的模塊等特點。lighttpd是眾多OpenSource輕量級的web server中較為優(yōu)秀的一個。源碼地址:http://www.lighttpd.net/
apache是世界排名第一的web服務器, 根據(jù)netcraft(www.netsraft.co.uk)所作的調(diào)查,世界上百分之五十以上的web服務器在使用apache. 源碼地址:http://httpd.apache.org/download.cgi
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發(fā)音為“engine X”, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。源碼地址:http://nginx.org/
其他嵌入式的http server很多,比如shttpd thttpd mathopd appweb goahead boa ,有興趣的可以自己查文檔學習。
總結(jié)
以上是生活随笔為你收集整理的C/C++程序员必须熟悉的开源库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态创建二维数组
- 下一篇: C++面试/技巧(四)