Linux系统编程:核心知识与实用指南
1. 系统编程概述
系统编程主要是编写系统软件,这类软件处于底层,直接与内核和核心系统库交互。像我们日常使用的 shell、文本编辑器、编译器、调试器、核心实用程序和系统守护进程,以及网络服务器、Web 服务器和数据库等,都属于系统软件。它们主要(甚至完全)与内核和 C 库进行交互。而其他软件,如高级 GUI 应用程序,则处于较高层次,只是偶尔会涉及底层操作。
无论程序员是全职编写系统软件,还是只是偶尔涉及,了解系统编程都能带来很大的益处。系统编程是所有软件编写的核心,它既可以是程序员的主要工作内容,也可以为更高层次的概念提供基础。
1.1 Linux 系统编程特点
Linux 是一个现代类 Unix 系统,由 Linus Torvalds 和全球的程序员社区从头开始编写。虽然 Linux 与 Unix 有相同的目标和理念,但它并非 Unix,而是有自己的发展路径,在需要时会有所分歧,仅在实用的地方与 Unix 趋同。Linux 系统编程的核心与其他 Unix 系统相同,但在基础之外,Linux 有其独特之处,它支持额外的系统调用,行为表现不同,还提供了新的特性。
1.2 系统编程与应用编程的对比
系统编程和应用编程有一些重要的区别,但也有相似之处。系统编程的显著特点是,系统程序员必须对他们所使用的硬件和操作系统有敏锐的认识。系统程序主要与内核和系统库交互,而应用程序还会与高级库交互。这些高级库抽象了硬件和操作系统的细节,其目的包括实现不同系统之间的可移植性、不同版本系统之间的兼容性,以及构建更易于使用、更强大的高级工具包。一个应用程序使用系统库还是高级库的比例,取决于该应