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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++程序员必须熟悉的开源库

發(fā)布時間:2024/8/23 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++程序员必须熟悉的开源库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作為一個經(jīng)驗豐富的Linux C/C++程序員, 肯定親手寫過各種功能的代碼, 比如封裝過數(shù)據(jù)庫訪問的類, 封裝過網(wǎng)絡通信的類,封裝過日志操作的類, 封裝過文件訪問的類, 封裝過UI界面庫等, 也在實際的項目中應用過, 但是回過頭仔細想想,其實以前自己寫過的這些代碼,只能是在特定的項目或者特定的環(huán)境中使用, 對于自己來說, 在不同的項目中應用, 只需要復制代碼, 改改也就可以了, 因為自己寫的代碼自己很熟悉。問題是, 你封裝的這些庫, 在給別人使用的時候, 別人用起來是否很方便, 跨平臺方面是不是也很通用, 性能是不是足夠的好, 是不是支持多線程, 功能是不是也足夠強大,可以適用于各種不同的需求。如果你上面這些都做到了, 證明你在這個庫上確實花費了一番功夫, 經(jīng)過了持續(xù)的改進和優(yōu)化。

在日常的開發(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)容,希望文章能夠幫你解決所遇到的問題。

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