跳转到内容

第 28 章 文件与 I/O

目录

从本章开始学习各种 Linux 系统函数,这些函数的用法必须结合 Linux 内核的工作原理来理解,因为系统函数正是内核提供给应用程序的接口,而要理解内核的工作原理,必须熟练掌握 C 语言,因为内核也是用 C 语言写的,我们在描述内核工作原理时必然要用“指针”、“结构体”、“链表”这些名词来组织语言,就像只有掌握了英语才能看懂英文书一样,只有学好了 C 语言才能看懂我描述的内核工作原理。读者看到这里应该已经熟练掌握了 C 语言了,所以应该有一个很好的起点了。我们在介绍 C 标准库时并不试图把所有库函数讲一遍,而是通过介绍一部分常用函数让读者把握库函数的基本用法,在掌握了方法之后,书上没讲的库函数读者应该自己查 Man Page 学会使用。同样,本书的第三部分也并不试图把所有的系统函数讲一遍,而是通过介绍一部分系统函数让读者理解操作系统各部分的工作原理,在有了这个基础之后就应该能够看懂 Man Page 学习其它系统函数的用法。

读者可以结合 APUE2e 学习本书的第三部分,该书在讲解系统函数方面更加全面,但对于内核工作原理涉及得不够深入,而且假定读者具有一定的操作系统基础知识,所以并不适合初学者。该书还有一点非常不适合初学者,作者不辞劳苦,在 N 多种 UNIX 系统上做了实验,分析了它们的内核代码,把每个系统函数在各种 UNIX 系统上的不兼容特性总结得非常详细,很多开发者需要编写可移植的应用程序,一定爱死他了,但初学者看了大段大段的这种描述(某某函数在 4.2BSD 上怎么样,到 4.4BSD 又改成怎么样了,在 SVR4 上怎么样,到 Solaris 又改成怎么样了,现在 POSIX 标准是怎么统一的,还有哪些系统没有完全遵守 POSIX 标准)只会一头雾水,不看倒还明白,越看越不明白了。也正因为该书要兼顾各种 UNIX 系统,所以没法深入讲解内核的工作原理,因为每种 UNIX 系统的内核都不一样。而本书的侧重点则不同,只讲 Linux 平台的特性,只讲 Linux 内核的工作原理,涉及体系结构时只讲 x86 平台,对于初学者来说,绑定到一个明确的平台上学习就不会觉得太抽象了。当然本书的代码也会尽量兼顾可移植性,避免依赖于 Linux 平台特有的一些特性。