描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111716617丛书名: Linux/Unix技术丛书
Linux是世界上最流行的开源操作系统。Linux系统编程技术将使你能够使用自己的系统程序扩展Linux操作系统,并与系统上的其他程序进行通信。 本书首先探讨了Linux文件系统及其基本命令、内置手册页、GNU编译器集合(GCC)和Linux系统调用。然后,你将了解如何处理程序中的错误,并学习如何捕获错误并打印错误相关信息。本书介绍了在系统上读写文件的多种方法,包括使用流和文件描述符。随着学习的不断深入,你将深入研究创建进程、创建僵尸进程和守护程序,并学习使用systemd处理守护程序的方法。之后,你将了解如何创建共享库,并探索不同类型的进程间通信(IPC)。在后续的章节中,你还将学习如何使用POSIX线程编写程序,以及如何使用GNU调试器(GDB)和Valgrind调试程序。 学完本书后,你将能够在Linux系统中开发自己的系统程序,包括守护进程、工具、客户端和过滤器。 通过阅读本书,你将: ?了解如何使用各种系统调用为Linux系统编写程序。 ?深入研究POSIX函数的工作原理。 ?理解并学会使用信号、管道、IPC和流程管理等关键概念。 ?了解如何集成程序与Linux系统。 ?探索高级主题,例如,文件系统操作、创建共享库和调试程序。 ?全面了解如何使用Valgrind调试程序。
Linux是世界上最流行的开源操作系统。Linux系统编程技术将使你能够使用自己的系统程序扩展Linux操作 系统,并与系统上的其他程序进行通信。
本书探讨了Linux文件系统及其基本命令、内置手册页、GNU编译器集合(GCC)和Linux系统调用;讲述了如何处理程序中的错误,以及如何捕获错误并打印错误相关信息;介绍了在系统上读写文件的多种方法,包括使用流和文件描述符。随着学习的不断深入,你将深入研究创建进程、创建僵尸进程和守护进程,并学习使用systemd处理守护进程的方法;了解如何创建共享库,并探索不同类型的进程间通信(IPC);还将学习如何使用POSIX线程编写程序,以及如何使用GNU调试器(GDB)和Valgrind调试程序。
学完本书,你将能够在Linux系统中开发自己的系统程序,包括守护进程、工具、客户端和过滤器。
通过阅读本书,你将:
◎ 了解如何使用各种系统调用为Linux系统编写程序。
◎ 深入研究POSIX函数的工作原理。
◎ 理解并学会使用信号、管道、IPC和流程管理等关键概念。
◎ 了解如何集成程序与Linux系统。
◎ 探索高级主题,例如,文件系统操作、创建共享库和调试程序。
◎ 全面了解如何使用Valgrind调试程序。
第1章 获取必要的工具并编写
第一个Linux程序 1
1.1 技术要求 1
1.2 安装GCC和GNU Make 2
1.2.1 准备工作 3
1.2.2 实践步骤 3
1.2.3 它是如何工作的 4
1.3 安装GDB和Valgrind 5
1.3.1 准备工作 5
1.3.2 实践步骤 5
1.3.3 它是如何工作的 6
1.4 在Linux中编写一个简单的
C程序 7
1.4.1 准备工作 7
1.4.2 实践步骤 7
1.4.3 它是如何工作的 8
1.4.4 更多 9
1.5 编写一个解析命令行选项
的程序 10
1.5.1 准备工作 10
1.5.2 实践步骤 10
1.5.3 它是如何工作的 12
1.6 在内置手册页中查找信息 13
1.6.1 准备工作 13
1.6.2 实践步骤 14
1.6.3 它是如何工作的 14
1.6.4 更多 15
1.7 搜索手册以获取信息 15
1.7.1 准备工作 15
1.7.2 实践步骤 15
1.7.3 它是如何工作的 15
1.7.4 更多 16
第2章 使你的程序易于脚本化 17
2.1 技术要求 18
2.2 返回值以及如何读取它们 18
2.2.1 准备工作 18
2.2.2 实践步骤 18
2.2.3 它是如何工作的 20
2.2.4 更多 21
2.2.5 参考 21
2.3 使用有意义的返回值退出程序 21
2.3.1 准备工作 21
2.3.2 实践步骤 21
2.3.3 它是如何工作的 24
2.3.4 更多 25
2.4 重定向标准输入、标准输出
和标准错误 25
2.4.1 准备工作 25
2.4.2 实践步骤 25
2.4.3 它是如何工作的 27
2.4.4 更多 28
2.5 使用管道连接程序 28
2.5.1 准备工作 28
2.5.2 实践步骤 28
2.5.3 它是如何工作的 29
2.5.4 更多 30
2.5.5 参考 30
2.6 写入标准输出和标准错误 30
2.6.1 实践步骤 30
2.6.2 它是如何工作的 32
2.6.3 更多 32
2.7 从标准输入读取 33
2.7.1 准备工作 33
2.7.2 实践步骤 33
2.7.3 它是如何工作的 34
2.7.4 更多 35
2.8 编写一个管道友好的程序 36
2.8.1 准备工作 36
2.8.2 实践步骤 36
2.8.3 它是如何工作的 38
2.8.4 更多 39
2.9 将结果重定向到文件 39
2.9.1 准备工作 40
2.9.2 实践步骤 40
2.9.3 它是如何工作的 43
2.9.4 更多 44
2.10 读取环境变量 44
2.10.1 准备工作 44
2.10.2 实践步骤 45
2.10.3 它是如何工作的 46
2.10.4 更多 47
第3章 深入探索Linux中的C语言 48
3.1 技术要求 49
3.2 使用GNU编译器套件
链接库 49
3.2.1 准备工作 49
3.2.2 实践步骤 49
3.2.3 它是如何工作的 52
3.2.4 更多 53
3.3 切换C标准 54
3.3.1 准备工作 54
3.3.2 实践步骤 54
3.3.3 它是如何工作的 56
3.3.4 更多 57
3.4 使用系统调用 57
3.4.1 准备工作 58
3.4.2 实践步骤 58
3.4.3 它是如何工作的 60
3.4.4 更多 61
3.5 获取Linux和类UNIX头
文件信息 61
3.5.1 准备工作 61
3.5.2 实践步骤 62
3.5.3 它是如何工作的 63
3.5.4 更多 63
3.6 定义功能测试宏 63
3.6.1 准备工作 64
3.6.2 实践步骤 64
3.6.3 它是如何工作的 67
3.6.4 更多 68
3.7 编译过程的4个步骤 68
3.7.1 准备工作 68
3.7.2 实践步骤 68
3.7.3 它是如何工作的 71
3.8 使用Make编译 72
3.8.1 准备工作 72
3.8.2 实践步骤 73
3.8.3 它是如何工作的 74
3.9 使用GCC选项编写一个
通用的Makefile 74
3.9.1 准备工作 74
3.9.2 实践步骤 75
3.9.3 它是如何工作的 75
3.9.4 更多 75
3.10 编写一个简单的Make file 76
3.10.1 准备工作 76
3.10.2 实践步骤 76
3.10.3 它是如何工作的 77
3.11 编写一个更高级的Makefile 77
3.11.1 准备工作 78
3.11.2 实践步骤 78
3.11.3 它是如何工作的 82
第4章 处理程序中的错误 84
4.1 技术要求 85
4.2 为什么错误处理在系统编程
中很重要 85
4.2.1 准备工作 85
4.2.2 实践步骤 85
4.2.3 它是如何工作的 87
4.3 处理常见的错误 87
4.3.1 准备工作 87
4.3.2 实践步骤 88
4.3.3 它是如何工作的 90
4.4 错误处理和errno 90
4.4.1 准备工作 91
4.4.2 实践步骤 91
4.4.3 它是如何工作的 92
4.5 处理更多errno宏 93
4.5.1 准备工作 93
4.5.2 实践步骤 93
4.5.3 它是如何工作的 94
4
Linux系统编程是指为Linux操作系统开发系统程序。Linux是世界上最流行的开源操作系统,它可以运行在所有设备上——从大型服务器到小型物联网(IoT)设备。了解如何为Linux编写系统程序将使你能够扩展操作系统,并将其与其他程序和系统相连接。
我们首先介绍如何使程序易于脚本化,并易于与其他程序交互。当我们为Linux编写系统程序时,应该始终努力使它们变小,同时使它们只做一件事,并且将这件事做好。这是Linux中的关键概念之一:创建能够以简单方式与其他程序进行数据交换的小程序。
随着学习的不断深入,我们将深入研究C语言,并了解编译器是如何工作的、链接器是做什么的、如何编写Makefile,等等。
我们将学习所有关于创建进程和守护进程的知识。我们还将创建自己的守护进程,并将守护进程置于systemd的控制之下。这将让我们能够使用内置的Linux工具启动、停止和重启守护进程。
我们还将学习如何使用不同类型的进程间通信(IPC)使进程进行信息交换;并了解如何编写线程化程序。
在本书的最后,我们将介绍如何使用GNU调试器(GDB)和Valgrind调试程序。
最终,你将能够为Linux编写各种各样的系统程序——从过滤器到守护进程。
【目标读者】
本书是为那些想为Linux开发系统程序,并想深入了解Linux系统的人准备的。任何遇到了与Linux系统编程的特定部分相关的问题,并且正在寻找一些特定的范例或解决方案的人,都可以从本书获益。
【本书内容】
第1章向你展示如何安装本书中所需的工具。同时,在该章中,我们还编写了第一个
程序。
第2章介绍我们应该如何(以及为什么)使程序易于脚本化,并易于被系统上的其他程序所使用。
第3章带领我们深入了解Linux中C编程的内部工作原理。我们将学习如何使用系统调用、编译器的工作原理、如何使用Make工具、如何指定不同的C标准,等等。
第4章向我们展示如何优雅地处理错误。
第5章介绍如何使用文件描述符和流来进行文件的读取和写入。该章还介绍了如何使用系统调用来创建和删除文件以及读取文件权限。
第6章介绍如何创建进程、如何创建守护进程、什么是父进程,以及如何将作业发送到后台和前台。
第7章向我们展示如何将守护进程置于systemd的控制之下。该章还教我们如何将日志写入systemd的日志以及如何读取这些日志。
第8章向我们展示什么是共享库、为什么它们很重要,以及如何创建自己的共享库。
第9章介绍如何以不同的方式修改终端,例如,如何禁用密码提示的回显。
第10章介绍关于IPC的内容,即如何使进程在系统上相互通信,内容包括FIFO、UNIX套接字、消息队列、管道和共享内存。
第11章解释什么是线程、如何编写线程化程序、如何避免竞态条件,以及如何优化线程化程序。
第12章介绍使用GDB和Valgrind进行调试。
【充分利用本书】
为了充分利用本书,你需要对Linux有一些基本的了解:了解一些基本的命令、熟悉文件系统的运行、学会安装一些新的程序。如果你对编程(尤其是C语言)也有一些基本的了解,那么将更有帮助。
你需要一台具有root访问权限的Linux计算机(通过su或sudo)才能完成所有的范例。你还需要安装GCC编译器、Make工具、GDB、Valgrind以及一些其他的小工具。关于Linux发行版本,这并不重要。本书提供了关于这些程序在Debian、Ubuntu、CentOS、Fedora和Red Hat发行版本中的安装说明。
如果你使用的是本书的数字版本,我们建议你自己键入代码或者通过GitHub存储库访问代码(下一节提供链接)。这样做将帮助你避免与复制粘贴代码相关的任何潜在错误。
【下载示例代码文件】
你可以从GitHub下载本书的示例代码文件,下载路径为:https://GitHub.com/PacktPublishing/
Linux-System-Programming-technologies。如果代码有更新,现有的GitHub存储库中的代码也将进行更新。
我们还提供了其他的代码包,包括丰富的书籍和视频: https://github.com/PacktPublishing/。可以看看他们!
【代码动画视频】
可以通过以下链接,以动画视频的方式查看本书代码:https://bit.ly/39ovGd6。
【下载彩色图像】
我们还提供了一个PDF文件,其中包含了本书中使用到的屏幕截图、图表的彩色图像。你可以在这里下载:http://www.packtpub.com/sites/default/ files/downloads/9781789951288_ColorImages.pdf。
评论
还没有评论。