先上目录
chapter 3
chapter 10
chapter 14
chapter 15
chapter 16
chapter 17
[apue] 作为 daemon 启动, Unix Domain Socket 侦听失败?
chapter 18
chapter 19
前言
开技术博客最好的时间是十年前(2010),其次是现在。
遥想当年读大学时,费尽心力读过一些书,其中不乏一些“教材型”书籍:概念罗列了一大堆,也用心看了,但是看完了就忘了——就是没有收获。
毕业后,记得第一次有种醍醐灌顶的感觉,还是在读侯捷的《深入浅出MFC》,真的有种 under hood 之后的恍然大悟的感觉。
同时为了更深入的理解书中内容,将整个 MFC 源码翻出来看了一遍,对于如何搭建一个框架来简化应用开发有了一些理解。
同时知道了看书不能不加选择,要看就要看经典的书、看经典作者。
后来又看了一系列侯捷的作品/译作:《Effective C++》《More Effective C++》《Essential C++》《深度探索 C++ 对象模型》《Win32 多线程程序设计》;
还有一些其它的作者,例如:
潘爱民的:《Effective STL》《COM原理与应用》;李师贤的:《C++ Primer 中文版》;荣耀的:《C++ 必知必会》;陈伟柱的:《C++ Templates》;
马维达的:《C++ 网络编程》《C++ 网络编程 II》;宋劲杉的:《Linux C 编程一站式学习》《Linux C 编程一站式学习 II》;
在看马维达的几本关于 C++ 网络的书籍时,其实主要是基于当时 (2010年)很火的一个C++网络库ACE展开的。当时也是把 ACE 的源代码翻出来通读了一遍,了解到了山外有山,Windows 之外还有一个 Unix 的世界,看着 ACE 对各种 Unix like 系统的跨平台封装的底层系统调用一头雾水,暗暗下定决定有机会要把 Linux 编程接口作一番深入了解。
其实现在回过头来看 ACE,确实是笨重了一些,它的代码量甚至能比得上一个早期的 Linux 内核 :),后来就出来许多专攻网络服务的库(asio、libevent……),就相当轻量级了,看起来也不会太费力。
当时也看到了 ACE 一些相当精巧的实现,例如通过一个锁来实现 Leader/Follower 线程池 (内部暗藏通知机制),甚至基于 ACE 现有的类搭建了一个跨机器的远程锁系统,都是让人叹为观止的杰作,但是最让我遗憾的是这些东西没有记录下来,以至于现在也只有一些模糊的印象,而说不出所以然了。这也是我开始写技术博客的一个重要驱动力,即写文章不光是给别人分享,也是自己的一个记录。
后来开始看 《Advanced Programming Unix Environment》这本经典著作,前几章看得有点枯燥,主要是一些基础知识,心想自己不会又读了一本教材吧。
但是越到后来,越感觉作者并不是简单的去写作,背后有他自己大量的实践,很可能他就是一边写着代码、一边去印证各个技术点。
常常一段话就能提炼出三、四个测试用例去验证,而作者在每章的练习题中,更是经常以一些他自己在验证过程中遇到的问题作为题目。
作者经常声明,他是四种平台(linux / mac / freebsd / solaris)上去验证一个特性,所以如果一些特性仅在某些平台存在,他一定会给出提示。
这里作者有着一种非常严谨的态度,我想经典之所以称之为经典、大师之所以成为大师,概为此也。
吸取之前看书的经验,既不能囫囵吞枣、不求甚解的看一本书,也不能看懂了实践了却没有记录下来,
于是从这本书开始,展开“工程师”视角,对书中每个技术点亲自做验证,验证通过了,固然证明书上所说不虚;
验证不通过,如果能弄明白原因,也能加深认识;如果弄不明白,就先放着,做个标记,留待将来看 linux 源码时解决。
总而言之,看这个系列的文章所面向的读者,乃是读过原著或者对 linux 系统编程特别熟悉、而且对 linux 底层实现有一定兴趣的人,否则读起来会不知所云,徒徒浪费时间。