作为一个经验丰富的Linux C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候, 别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程, 功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了, 证明你在这个库上确实花费了一番功夫, 经过了持续的改进和优化。

在日常的开发中, 作为一个程序员, 很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟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++程序员必须熟悉的开源库相关推荐

  1. 在别的地方看的给程序员介绍一些C++开源库,记录给大家共同学习

    在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习 首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?actio ...

  2. 阿里90后程序员入选全球顶级开源社区技术委员会,网友:真大佬

    江山代有才人出,一代更比一代强.在互联网行业社区,有程序员贴出了一则消息,称阿里某90后程序员入选全球顶级开源社区技术监督委员会成员,可谓后生可畏:全球顶级开源社区CNCF技术监督委员会,第一次有国人 ...

  3. BookChat学习软件—(面向程序员的 IT 互联网开源编程书籍免费阅读)

    ▌BookChat https://www.bookchat.net/ 优点 开源:基于 Apache 2.0 开源协议进行开源,对商业友好 秀气:简洁.美观,没那么多花里胡哨 丰富:注册.登录.搜索 ...

  4. C#:程序员快速熟悉C#

    C#:程序员快速熟悉C# 前言 基础篇 变量命名 字符串常量 @"" 可空类型(Nullable) 数组 参数数组 数组的基类 Array 结构体 循环 结构 struct 枚举 ...

  5. 一个被高管绿的程序员如何彻底地删库跑路

    原文:程序员如何彻底地删库跑路 据说, 某公司程序员贺某在2月23晚突然把公司数据库全部删除. 原因是: 高管(据说是创始人之一)绿了员工,员工去公司找高管理论, 高管把这名员工裁撤掉,员工的老婆去劝 ...

  6. 骚出天际!一个程序员女装照片的开源项目

    最近这两天我发现程序员女装的开源项目又在 GitHub 上火了起来,今天高居日榜的第三名. 可能有很多程序员对这个开源项目不太熟悉,其实这个开源项目虽然程序员大佬们都在不遗余力的男扮女装,贡献着自己的 ...

  7. 耗费 7.5 亿做的“垃圾”,被 3 个程序员爸爸重写并开源了

    因学校APP太难用,码农爸妈们自己开发开源版本,结果反遭官方报警. 这年头,养孩子的难度系数也太高了吧. 而且绝不是家长们吹毛求疵,是APP真的难用到了令人发指的程度: 安卓商店用户评分只有1.2星  ...

  8. 程序员写了个开源软件,完成了舔狗的绝地反杀...

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Sometimes, people cry not because ...

  9. 停不下来!程序员在GitHub上开源了一个自制表情包项目

    世界上本没有表情包,脑洞大的人多了,便有了表情包,如今,大家伙聊天都离不开表情包,但是手头上很多时候表情包根本不够用,所以市面上就有很有App.小程序可以帮助你制作专属你的表情包 而程序员在这方面就有 ...

最新文章

  1. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
  2. linux管道阻塞代码,linux中的管道
  3. Codeforces Round #645 (Div. 2)(AB)
  4. 1285. 单词 ac自动机 + fail树
  5. 机器学习算法及应用领域相关的中国大牛
  6. Thinking In Design Pattern——Unit Of Work(工作单元)模式探索
  7. java之try catch finally
  8. 《从零开始学Swift》学习笔记(Day 39)——构造函数重载
  9. php mysql bbs_BBS(php mysql)完整版(二)
  10. exchange批量创建用户邮箱
  11. 关于微信在线客服系统的实现(已经证实可用)
  12. 最大流、最小费用最大流【模板】
  13. sfsdfsdffsdf
  14. python3 beautifulsoup配合requests下载老司机图片
  15. 如何快速学习STAR-CCM+软件解决工程实际问题
  16. 操作系统原理——(1)引言:计算机系统和操作系统概述
  17. 5G网络巨大耗电量和基站密度,注定5G服务价格昂贵
  18. Grafana 的安装和配置
  19. Google MapReduce中文版
  20. display显示属性理解

热门文章

  1. java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper
  2. c语言编写两个矩阵的乘积,如何用c语言编写两个模糊矩阵相乘的程序?
  3. PHP8编译swoole出错,swoole自定义错误的方法
  4. android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表
  5. jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程
  6. linux 生成hash值命令,linux-从给定哈希计算base64编码哈希?
  7. 分析启动耗时 android,Android app启动耗时分析
  8. lock字段mysql_MySQL的lock tables和unlock tables的用法(转载)
  9. python定位元素在列表中的位置_python定位列表元素
  10. 网页设计上机考试原题_全国计算机三级信息安全考试 经验分享