2023-10-03 23:24:30
书如其名:UNIX环境高级编程。关于Unix的各种SysCallAPI,以及POSIX标准,这本书都会带你熟悉,并最终让我们能对着各种手册独立编写出UNIX环境高级程序。
虽然这书好像本身也是作为参考书编写的,不过不少地方读起来是很有意思的。高中略读过的Windows程序设计定位也挺类似这本书,不过总体而言APUE介绍的更详细,另一本书则显得比较像系统库函数参考手册了。这也正常——毕竟Windows的大多数能力都封装好在Windows的WinAPI体系中了,实现功能也只需要调用线程的API和GDI绘图就行。
UNIX哲学或许不适用于构建一个大型操作系统,但是绝对适合构建强大的工具链。
首先关于操作系统的定位:它是控制计算机硬件资源,提供程序运行环境的软件。
从发展的角度来看,最早使用裸机直接运行程序。后来程序数量增长,大家开始进行代码复用,借助层层抽象让程序只关注程序的核心逻辑。
从结构的角度来看,UNIX体系结构包含直接控制硬件的内核,以及提供系统调用的内核接口。内核之上则是作为命令解释器/用户交互工具的shell,以及共享库。
APUE对于认识Linux给出了这样一个角度:从登陆开始,介绍登陆会用到的文件和用户相关的字段;然后是shell,对于各种常见的shell进行了罗列和对比。同时引入了POSIX的概念,以及一些历史;之后是文件和目录,首先是Linux的根文件系统以及Linux实现文件系统的方式,然后是文件名的规范以及.和..,接着是路径名以及ls和man命令的介绍,同时使用Linux的库函数实现了ls命令。同时还介绍了两个特殊的目录:进程的工作目录,以及用户的起始目录。
接着是IO的简介。首先是文件描述符File Discriptor,然后介绍了三个标准文件描述符:stdin, stdout, stderr,以及重定向符。接着是不带缓冲的IO和标准IO。
然后是对于进程的简介,涉及程序,进程和进程ID(pid),进程控制(fork, exec, waitpid),随后以一个简单却五脏俱全的shell实现结束了这部分,并提及了线程的概念。
之后还简要介绍了错误处理,用户标识,信号,时间值和系统调用以及库函数这几个内容。
接着的第二章介绍了UNIX标准及其实现。UNIX标准化的历史比较长,IEEE POSIX是其中比较广为接受的版本。