Linux System Programming

Robert Love

出版时间

2013-06-08

ISBN

9781449339531

评分

★★★★★
书籍介绍
本书的独特之处在于它刻意站在内核与 glibc 之间那片被多数读物忽略的灰色地带:不深入内核源码,也不停留在 API 调用,而是把系统调用与库实现讲成一体。作者 Robert Love 兼具内核与库的经验,让读者看清每次函数调用背后真正发生了什么——进程如何由目标码演变为携带数据、资源与状态的虚拟计算机,文件描述符为何是索引文件表的非负整数,信号为何是单向异步的通知。这种“兼顾系统编程与内核实现”的视角,使它在同类书中独树一帜。它适合想理解 Linux 底层机制、又嫌 APUE 过于庞杂的读者;缺点也明显:进程间通信与多线程着墨不多,后半部分偏简。
AI导读
核心看点
  • 深入解析Linux内核与核心库,覆盖进程、文件I/O及信号机制
  • 从理论与应用双重视角,揭示系统调用底层原理与实现细节
  • 聚焦内核之上的应用层编程,助力编写高效且贴近系统的代码
读者共识
  • 作者功力深厚,对I/O和内存讲解精彩,是理解系统调用的必读之作
  • 内容短小实用,适合作为APUE前的入门,但部分读者认为深度不足
  • 兼具系统编程与内核实现视角,有助于厘清POSIX、glibc与内核关系
精彩摘录
  • "进程(process)是执行中的目标码(object code):正在运行的程序。但它不仅仅是目标码,进程由数据、资源、状态以及一个虚拟的计算机组成。"
  • "Linux 中的授权机制由用户(user)和组(group)提供。每个用户都会被分配一个独一无二的正整数,称为用户标识符(user ID,简称 uid)。每个进程恰好会被关联到一个 uid,用来识别运行进程的用户,这被称为进程的真实用户标识符(real uid)。"
  • "信号(signal)是一种单向一部通知机制。信号可以从内核送往一个进程,从一个进程送往另一个进程,或者从一个进程送给它自己。"
  • "一个文件必须先打开,才可以对它进行操作。内核会替每个进程维护一份已打开文件列表,称为文件表(file table)。此表是通过非负整数被索引,而此非负整数称为文件描述符(file descriptor,缩写 fd)。"
  • "默认情况下,子进程会取得其父进程的文件表。"
  • "该表(file table)中每个条目内含与已打开文件相关的信息,包括一个指针(指向文件 inode 在内存中的副本)以及相关的元数据(例如文件位置与访问模式)。"
  • "第一个文件系统会被挂载到命名空间的 root 结点,“/”,这被称为根文件系统(root file system)。Linux 系统通常会具有一个根文件系统。"
用户评论
一本极好的书
多少有一些感觉 后半部分写的太简单了
native is not naive!兼顾system programming和kernel implementation,对io和thread和memory的讲解尤为精彩。
值得推荐,短小实用,虽然有些部分有参考手册的味道,尤其IO的部分讲解得很详细,适合读APUE前的入门,不过缺少了进程间通信,多线程也讲得太少,最后还是要去读APUE的。
针对Linux3.x内核哦
不是大全
a must read to understand what Linux provides at the system call and libc layer
和作者的LKD一起阅读,效果更佳
结合kernel和glibc 一起讲, 作者功力深厚. 非常值得学习. 个人认为比APUE好.
下载
收藏