《UNIX环境高级编程》(APUE)阅读心得

1,442 阅读3分钟

一、概述

APUE是一本十分全面的UNIX环境编程工具书。对于初学者而言,其对各个API其后的大致功能以及原理都有基本的讲解,即使是对操作系统原理不够了解的读者都能够理解其作用;而对于在UNIX编程环境有了足够了解和经验的读者而言,书中对大部分常用函数以及其各参数、选项的功能的详细描述让其成为了一本可以随时查阅的编程“字典”,足够面对大部分的使用场景。就笔者自身来说,初次阅读虽然有些知其然不知其所以然,但在总体上了解了UNIX环境下可以使用的各种系统调用,明白了如何在UNIX环境下编程,对操作系统原理有了进一步的了解;在后续的实际系统编程中,也时常查阅有关函数的使用,对项目的各部分作用也有了更深的理解。

二、大致内容

第一章和第二章介绍和厘清了一些会在后续内容中反复提到的概念,例如SUS、POSIX、信号、时间等。强烈建议在阅读这两章时对这些基本名词和概念有比较清晰的理解,了解之间的区别,否则在后续章节的阅读可能会出现对各种名词不明就里的情况。2.2和2.3的可能需要比较着重的理解。

由于UNIX上一切皆文件(描述符)的理念,所以对UNIX系统的操作很大程度上就是对各类不同文件的操作。第三章至第六章讲述了如何对文件进行IO操作和标准IO库中的内容,以及不同的权限设置等,可以说是进一步深入编程的基础。很多常用的Linux命令如chown等实际上都是调用相应标准库函数的应用程序。UNIX中对文件的IO都是围绕文件流进行的,“当用标准I/O库打开或创建一个文件时,我们已使一个流与一个文件相关联。”

第七到第十三章则是讲解的进程和线程控制、信号的一些操作方法。这对操作系统原理的知识有一定要求,但影响不大。UNIX上实现线程同步的方法只有互斥量、读写锁、条件变量、自旋锁和屏障几种,需要根据实际的场景权衡锁的粒度。避免出现死锁是多线程编程中的重要环节,书中直接通过代码实例演示了破解方式,但对其原理的涉猎较少,需要自行搜索相关内容拓充。

书中的第十四章到第十七章主要都是对各类高级IO和UNIX环境下的网络编程进行讲解。IO很大程度上决定了网络服务器的最高并发量,选择高效的IO方式是网络编程中的重要部分。IPC和网络IPC则是两个进程乃至两个主机之间沟通的桥梁,网络套接字是五层网络模型中应用层和传输层之间的门户,用户只需要和套接字进行交互,而运输层及下则由内核负责处理。

后续四个章节则与终端和数据库相关,笔者阅读时并未有深入。

三、不足

APUE第三版出版至今(2013)已有9年,而这期间Linux加入了许多新的特性和功能,例如epoll和sendfile等,书中的大部分内容往往只能提供一个基础性的功能,更高性能的方案并不是十分完备,或者说技术方案的迭代速度更快;另一方面,书中更多的是对于实际应用的讲解,对许多技术细节及其原理讲解不多,需要读者自行去学习和探索。