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