先上目录

chapter 3

[apue] dup2的正确打开方式

chapter 10

[apue] 等待子进程的那些事儿

chapter 14

[apue] 使用文件记录锁无法实现父子进程交互执行同步

chapter 15

[apue] 多进程管道读写的一些疑问

[apue] 测试管道容量的一些疑问

[apue] 管道原子写入量的一个疑问

[apue] 使用 poll 检测管道断开

[apue] 使用 popen/pclose 的一点疑问

[apue] popen/pclose 疑点解惑

[apue] FIFO:不是文件的文件

chapter 16

[apue] syslog 导致 accept 出错?

[apue] 如何处理 tcp 紧急数据(OOB)?

chapter 17

[apue] 神奇的 Solaris pipe

记一次传递文件句柄引发的血案

记一次传递文件句柄引发的血案 (续)

[apue] 作为 daemon 启动, Unix Domain Socket 侦听失败?

chapter 18

[apue] 一个查看当前终端标志位设置的小工具

[apue] 使用 Ctrl+S停止输出而不用挂起前台进程

chapter 19

[apue] 书中关于伪终端的一个纰漏

前言

开技术博客最好的时间是十年前(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 底层实现有一定兴趣的人,否则读起来会不知所云,徒徒浪费时间。

05-26 19:33