《Linux系统编程(第2版)》——导读

简介: 这本书是关于Linux上的系统编程。“系统编程”是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话。换句话说,本书的主题是Linux系统调用和底层函数说明,如C库定义的函数。


screenshot



前言

这本书是关于Linux上的系统编程。“系统编程”是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话。换句话说,本书的主题是Linux系统调用和底层函数说明,如C库定义的函数。

虽然已经有很多书探讨UNIX上的系统编程,却很少有专注于探讨Linux方面的书籍,而探讨最新版本的Linux以及Linux特有的高级接口的书籍更是凤毛麟角。此外,本书还有一个优势:我为Linux贡献了很多代码,包括内核及其上面的系统软件。实际上,本书中提到的一些系统调用和系统软件就是我实现的。因此,本书涉及很多内幕资料,不仅介绍系统接口如何工作,还阐述它们实际上是如何工作,以及如何高效利用这些接口。因此,本书既是一本关于Linux系统编程的教程,也是一本介绍Linux系统调用的手册,同时还是一本如何实现更优雅、更快代码的内幕指南。这本书内容翔实,不管你是否每天都在编写系统级代码,本书给出的很多技巧都有助于你成为更优秀的软件工程师。
本书假定读者熟悉C编程和Linux编程环境——不要求很精通,但至少比较熟悉。如果你不习惯于UNIX文本编辑器——Emacs和vim(后者成为最广泛使用的编辑器,而且评价很高),那么至少应该熟悉一个。你还应该对如何使用gcc、gdb、make等工具很熟悉。已经有很多书籍介绍了关于Linux编程的工具和实践,本书最后的附录B给出一些有用的资源。

我并没有假设用户了解UNIX或Linux系统编程。本书是从零开始,从最基本的开始介绍,一直到高级接口和一些优化技巧。我希望不同层次的读者都能够从本书学到一些新东西,觉得本书有价值。在写本书过程中,我自己就感觉颇有收获。

同样,我并不想去说服或鼓励读者做什么。目标读者显然是那些希望能够(更好地)在系统上编程的工程师,但是希望奠定更坚实的基础的高级编程人员还可以找到很多其他有趣的资料。本书也适合那些只是出于好奇的黑客,它应该能够满足他们的好奇心。本书目标是希望能够满足大部分的编程人员。

不管出于什么目的,最重要的是,希望你会觉得本书很有意思。

目录

[第1章 入门和基本概念
1.1 系统编程

1.1.1 为什么要学习系统编程
1.1.2 系统编程的基础
1.1.3 系统调用
1.1.4 C库
1.1.5 C编译器
1.2 API和ABI
1.2.1 API
1.2.2 ABI
1.3 标准
1.3.1 POSIX和SUS的历史
1.3.2 C语言标准
1.3.3 Linux和标准
1.3.4 本书和标准
1.4 Linux编程的概念
1.4.1 文件和文件系统
1.4.2 进程
1.4.3 用户和组
1.4.4 权限
1.4.5 信号
1.4.6 进程间通信
1.4.7 头文件
1.4.8 错误处理
1.5 开始系统编程
[第2章 文件I/O
2.1 打开文件

2.1.1 系统调用open()
2.1.2 新建文件的所有者
2.1.3 新建文件的权限
2.1.4 creat()函数
2.1.5 返回值和错误码
2.2 通过read()读文件
2.2.1 返回值
2.2.2 读入所有字节
2.2.3 非阻塞读
2.2.4 其他错误码
2.2.5 read()调用的大小限制
2.3 调用write()写
2.3.1 部分写(Partial Write)
2.3.2 Append(追加)模式
2.3.3 非阻塞写
2.3.4 其他错误码
2.3.5 write()大小限制
2.3.6 write()行为
2.4 同步I/O
2.4.1 fsync()和fdatasync()
2.4.2 sync()
2.4.3 O_SYNC标志位
2.4.4 O_DSYNC和O_RSYNC
2.5 直接I/O
2.6 关闭文件
2.7 用lseek()查找
2.7.1 在文件末尾后查找
2.7.2 错误码
2.7.3 限制
2.8 定位读写
2.9 文件截短
2.10 I/O多路复用
2.10.1 select()
2.10.2 poll()
2.10.3 poll()和select()的区别
2.11 内核内幕
2.11.1 虚拟文件系统
2.11.2 页缓存
2.11.3 页回写
2.12 结束语

相关文章
|
7月前
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
333 13
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
9月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
10月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
205 26
|
10月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
209 17
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
546 13
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
726 6
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
398 3