先上目录

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 底层实现有一定兴趣的人,否则读起来会不知所云,徒徒浪费时间。

apue 外传的更多相关文章

  1. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

  2. [APUE]UNIX进程的环境(下)

    一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...

  3. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  4. APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试

    此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...

  5. APUE fig 1.10示例代码的完善--对提示符及输入回车的优化

    APUE 第3版第15页的shell2.c示例程序,运行效果如下: gcc ol.shell.c -o origin_shell ./origin_shell % date 2015年12月13日 星 ...

  6. 关于apue.3e中apue.h的使用

    关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...

  7. APUE学习之多线程编程(三):线程属性、同步属性

    一.线程属性      可以使用pthread_attr_t结构修改线程默认属性,并这些属性和创建的线程练习起来,可以使用pthread_att_init函数初始化pthread_attr_t结构,调 ...

  8. APUE学习之多线程编程(二):线程同步

         为了保证临界资源的安全性和可靠性,线程不得不使用锁,同一时间只允许一个或几个线程访问变量.常用的锁有互斥量,读写锁,条件变量           一.互斥量      互斥量是用pthrea ...

  9. APUE学习之多线程编程(一):线程的创建和销毁

    一.线程标识      和每个进程都有一个进程ID一样,每个线程也有一个线程ID,线程ID是以pthread_t数据类型来表示的,在Linux中,用无符号长整型表示pthread_t,Solaris ...

随机推荐

  1. Ninja构建系统入门

    1. 介绍 开篇先介绍.先甩资料给大家看,之后再自己演示一下基本使用.Ninja 是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来 ...

  2. SpringBoot高级篇Ⅸ --- 热部署与监控管理

    一.热部署 在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们不希望重启应用的情况下,程序可以自动部署(热部署). 1.1 模板引擎 在SpringBoot中开发情况 ...

  3. Matlab 与 c++对txt 文档的读写格式

    学习g++能够读取什么格式的txt文件. 读基本指令: >sprintf(filename, "doc_%d.txt", d); >fileptr = fopen(fi ...

  4. 从O365中获取users到D365中 使用flow

    在我上篇blog中讲解到了怎么用代码把O365 users 获取到D365中. 从O365中获取users到D365中 这几天一直在研究flow, 发现flow可以更简单的完成这个功能. 一开始没有考 ...

  5. http请求中的 OPTIONS 多余请求消除,减少的案例

    问题: 项目中遇到移动端发送同样的请求2次,仔细看了一下,有个是options报文. HTTP请求翻一倍,对服务器的性能有较大影响,造成nginx的无畏消耗,需要消除它. 解决思路: 1.上网查看了一 ...

  6. javabst1

    (单选题)下列概念中不包括任何实现,与存储空间没有任何关系的是() A)类 B)接口 C)抽象类 D)对象 2.(单选题)HTTP状态码中表示请求资源不存在的是(). A)100 B)200 C)30 ...

  7. LeetCode.509——斐波那契数

    问题描述: 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) ...

  8. 洛谷P1649 【[USACO07OCT]障碍路线Obstacle Course】

    题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...

  9. 《Python学习手册 第五版》 -第5章 数值类型

    本章是承接第四章整体说明之后,将对”数值类型“展开详细的说明 数值类型这一章主要通过一下几个内容来讲解: 1.数值类型有哪些? 2.表达式运算符:有哪些?有什么规范? 3.数值的显示格式 接下来,从第 ...

  10. Navicat Premium 12(破解版免安装)

    获取安装包解压至任意位置 切勿更新!!! 切勿更新!!! 切勿更新!!! 扫下方二维码关注公众号回复:navicat12即可获取