欢迎您来到懒之才-站长的分享平台!   学会偷懒,并懒出境界是提高工作效率最有效的方法!
首页 > 教程文档 > 操作系统&服务器 > [Linux应用程序开发(第2版)].Michael.K.Johnson等.扫描版[PDF][40.97MB]

[Linux应用程序开发(第2版)].Michael.K.Johnson等.扫描版[PDF][40.97MB]

2019-07-17 382 收藏 0 赞一个 0 真差劲 0 去评论 去下载

内容简介

本书介绍了Linux环境下进行应用程序开发需要掌握的知识,对许多编程实践中经常遇到的内容进行了详细的讲解,并且提供了典型的实例加以说明。
全书分为四个部分。第1部分是初学者需要了解的知识,包括Linux的历史、从事自由软件开发需要了解的版权知识和GPL等许可证,以及如何获取和使用在线文档系统。第2部分介绍了开发环境和工具。其中包括vi,emacs编辑器,gdb调试器的使用,gcc的选项和扩展,GNU C库的基本知识,内存溢出和泄漏的调试工具,如何创建、使用、管理静态库和动态库,以及如何通过系统调用请求系统服务。第3部分详细介绍了Linux系统编程知识。其中包括进程模型,简单文件管理,信号处理,高级文件操作,目录操作,作业控制,终端与伪终端,socket网络,时间和定时器,随机数,虚拟控制台,Linux控制台,以及如何编写安全的程序。第4部分精选了Linux编程中最常用的开发库进行介绍。其中包括字符串匹配,用于终端编程的S-lang库,基于散列的数据库函数库,命令行解析库,如何运行时动态加载共享对象,以及有关用户身份识别和验证的库。
本书内容丰富、实用,语言通俗,不仅适合初学者学习,也适合熟悉Unix环境编程的高级开发人员参考。

目录

第1部分 起步 
第1章 Linux的发展历史 2 
1.1 自由Unix软件简史 3 
1.2 Linux的发展 4 
1.3 Unix系统的概念谱系 5 
1.4 Linux谱系 7 
第2章 许可证和版权 8 
2.1 版权 8 
2.2 许可 10 
2.3 自由软件许可证 10 
2.3.1 GNU通用公共许可证 11 
2.3.2 GNU库通用公共许可证 12 
2.3.3 MIT/X/BSD风格的许可证 12 
2.3.4 旧BSD风格的许可证 12 
2.3.5 艺术许可证 12 
2.3.6 许可证的不兼容性 13 
第3章 在线系统文档 14 
3.1 man手册页 14 
3.2 info手册页 15 
3.3 其他文档 15 

第2部分 开发工具和环境 
第4章 开发工具 18 
4.1 编辑器 19 
4.1.1 Emacs 20 
4.1.2 vi 21 
4.2 Make 21 
4.2.1 复杂命令行 24 
4.2.2 变量 25 
4.2.3 后缀规则 26 
4.3 GNU的调试器 27 
4.4 跟踪程序行为 31 
第5章 gcc的选项和扩展 33 
5.1 gcc选项 33 
5.2 头文件 36 
5.2.1 long long 36 
5.2.2 内嵌函数 36 
5.2.3 可选择的扩展关键字 36 
5.2.4 特征 37 
第6章 GNC的C语言库 38 
6.1 特征选择 38 
6.2 POSIX接口 40 
6.2.1 POSIX要求的类型 40 
6.2.2 发现运行时的权能 42 
6.2.3 查找和设置基本系统信息 43 
6.3 兼容性 45 
第7章 内存调试工具 46 
7.1 存在Bug的代码 46 
7.2 glibc的内存检查工具 48 
7.2.1 发现内存堆的损坏 49 
7.2.2 使用mtrace()来跟踪分配情况 52 
7.3 利用mpr找到内存泄露 53 
7.4 利用valgrind发现内存错误 55 
7.5 电网 60 
7.5.1 使用电网 61 
7.5.2 内存对齐 61 
7.5.3 其他特性 63 
7.5.4 局限性 63 
7.5.5 资源消耗 63 
第8章 创建和使用库 65 
8.1 静态库 65 
8.2 共享库 66 
8.3 设计共享库 67 
8.3.1 管理兼容性 67 
8.3.2 不兼容的库 68 
8.3.3 设计兼容的库 68 
8.4 构造共享库 69 
8.5 安装共享库 70 
例子 71 
8.6 使用共享库 72 
8.6.1 使用无须安装的库 73 
8.6.2 提前装载库 73 
第9章 Linux系统环境 75 
9.1 进程环境 75 
9.2 理解系统调用 76 
9.2.1 系统调用的限制 77 
9.2.2 系统调用的返回码 77 
9.2.3 使用系统调用 79 
9.2.4 通用错误返回码 80 
9.3 查找头文件和库文件 85 
第3部分 系统编程 
第10章 进程模型 88 
10.1 定义进程 88 
10.1.1 使用线程的复杂性 88 
10.1.2 Linux的方式 89 
10.2 进程属性 89 
10.2.1 pid及其生成 89 
10.2.2 信用状 90 
10.2.3 文件系统用户标识符 94 
10.2.4 关于uid和gid的总结 95 
10.3 进程信息 96 
10.3.1 程序参数 97 
10.3.2 资源的使用 98 
10.3.3 建立使用限制 100 
10.4 进程基本元素 101 
10.4.1 创建子进程 102 
10.4.2 等待子进程结束 103 
10.4.3 运行新程序 104 
10.4.4 用vfork()更快速地创建进程 106 
10.4.5 自我终止 107 
10.4.6 终止其他进程 107 
10.4.7 转储内核文件信息 109 
10.5 简单子进程 109 
10.5.1 用system()运行和等待 109 
10.5.2 从进程读或写 110 
10.6 会话和进程组 112 
10.6.1 会话 113 
10.6.2 控制终端 113 
10.6.3 进程组 113 
10.6.4 孤儿进程组 114 
10.7 介绍ladsh 115 
用ladsh运行外部程序 116 
10.8 创建克隆 129 
第11章 简单的文件管理 130 
11.1 文件模式 132 
11.1.1 文件访问权限 133 
11.1.2 文件权限修饰符 134 
11.1.3 文件类型 136 
11.1.4 进程的umask 137 
11.2 基本的文件操作 138 
11.2.1 文件描述符 138 
11.2.2 关闭文件 139 
11.2.3 在文件系统中打开文件 139 
11.2.4 文件的读、写以及位置 
11.2.4 指针的移动 141 
11.2.5 局部读和写 145 
11.2.6 缩短文件 147 
11.2.7 同步文件 147 
11.2.8 其他操作 148 
11.3 查询和修改Inode信息 149 
11.3.1 查找Inode信息 149 
11.3.2 一个使用stat()的简单示例 150 
11.3.3 轻松确定访问权限 152 
11.3.4 改变文件的访问权限 153 
11.3.5 改变文件的所有者和组 153 
11.3.6 改变文件的时间戳 154 
11.3.7 Ext3扩展属性 155 
11.4 操作目录项 159 
11.4.1 创建设备文件以及命名管道的目录项 160 
11.4.2 创建硬链接 162 
11.4.3 使用符号链接 163 
11.4.4 删除文件 164 
11.4.5 重命名文件 164 
11.5 操作文件描述符 165 
11.5.1 改变打开文件的访问模式 165 
11.5.2 修改close-on-exec标志 166 
11.5.3 复制文件描述符 166 
11.6 创建无名管道 167 
11.7 对ladsh添加重定向 168 
11.7.1 数据结构 168 
11.7.2 修改代码 169 
第12章 信号处理 172 
12.1 信号的概念 173 
12.1.1 信号的生命周期 173 
12.1.2 简单信号 173 
12.1.3 可靠信号 175 
12.1.4 信号和系统调用 176 
12.2 Linux(和POSIX)信号系统的API 177 
12.2.1 发送信号 177 
12.2.2 使用sigset_t 178 
12.2.3 捕捉信号 178 
12.2.4 操作一个进程的信号掩码 180 
12.2.5 找到等待信号的集合 182 
12.2.6 等待信号 182 
12.3 有效信号 183 
描述信号 187 
12.4 编写信号处理程序 188 
12.5 重新打开日志文件 190 
12.6 实时信号 193 
信号队列和排序 193 
12.7 获取信号的信息 196 
12.7.1 得到一个信号的上下文 196 
12.7.2 使用信号发送数据 202 
第13章 高级文件操作 205 
13.1 多路输入输出 205 
13.1.1 非阻塞I/O 208 
13.1.2 用poll()的多路传输 209 
13.1.3 使用select()的多路传输 213 
13.1.4 比较poll()和select() 217 
13.1.5 使用epoll进行多路传输 220 
13.1.6 比较poll()和epoll 225 
13.2 内存映射 229 
13.2.1 页对齐 230 
13.2.2 建立内存映射 230 
13.2.3 撤销映射区域 235 
13.2.4 同步内存区域到磁盘 235 
13.2.5 锁定内存区域 236 
13.3 文件锁定 237 
13.3.1 文件锁 238 
13.3.2 记录锁 239 
13.3.3 强制锁 245 
13.3.4 租赁文件 245 
13.4 read()和write()的替代方法 249 
13.4.1 分散/聚集的读和写 249 
13.4.2 忽略文件指针 251 
第14章 目录操作 253 
14.1 当前工作目录 253 
14.1.1 查找当前工作目录 253 
14.1.2 特殊文件“.”和“..” 255 
14.1.3 当前目录 255 
14.2 改变根目录 256 
14.3 创建和删除目录 256 
14.3.1 创建新目录 256 
14.3.2 删除目录 257 
14.4 读取目录的内容 257 
再次读取目录内容 259 
14.5 文件名匹配搜索 259 
14.5.1 使用子进程 260 
14.5.2 内在匹配搜索 261 
14.6 为ladsh增加目录和匹配功能 265 
14.6.1 增加cd和pwd 266 
14.6.2 增加文件名匹配查询 267 
14.7 遍历文件系统的树结构 270 
14.7.1 使用ftw() 270 
14.7.2 用nftw()函数进行文件树遍历 272 
14.7.3 实现find功能 274 
14.8 目录变更提示 276 
第15章 作业控制 284 
15.1 作业控制基础 284 
15.1.1 重新启动进程 284 
15.1.2 停止进程 285 
15.1.3 处理作业控制信号 285 
15.2 ladsh中的作业控制 287 
第16章 终端与伪终端 293 
16.1 tty操作 294 
16.1.1 终端实用函数 294 
16.1.2 控制终端 295 
16.1.3 终端所有权 296 
16.1.4 用utemper工具进行记录 297 
16.1.5 手工记录 298 
16.2 termios概述 308 
16.3 termios实例 309 
16.3.1 密码 309 
16.3.2 串行通信 311 
16.4 termios调试 325 
16.5 termios参考 326 
16.5.1 函数 327 
16.5.2 窗口尺寸 330 
16.5.3 标志位 331 
16.5.4 输入模式标记 332 
16.5.5 输出模式标记 334 
16.5.6 控制模式标记 335 
16.5.7 控制模式字符 336 
16.5.8 本地模式标记 338 
16.5.9 控制read() 340 
16.6 伪终端 341 
16.6.1 打开伪终端 342 
16.6.2 打开伪终端的简单方法 343 
16.6.3 打开伪终端的复杂方法 344 
16.6.4 伪终端范例 348 
第17章 socket网络 358 
17.1 协议支持 358 
17.1.1 理想的网络 358 
17.1.2 实际的网络 359 
17.1.3 让实际的网络变得理想 360 
17.1.4 地址 360 
17.2 实用函数 361 
17.3 基本套接字操作 362 
17.3.1 建立一个套接字 362 
17.3.2 建立连接 364 
17.3.3 将地址绑定到套接字 364 
17.3.4 等待连接 364 
17.3.5 连接到一个服务器 365 
17.3.6 找到连接地址 366 
17.4 Unix域套接字 367 
17.4.1 Unix域地址 367 
17.4.2 等待一个连接 368 
17.4.3 连接到一个服务器 370 
17.4.4 运行Unix域的示例 371 
17.4.5 未命名的Unix域套接字 371 
17.4.6 传递文件描述符 372 
17.5 基于TCP/IP协议的联网机器 377 
17.5.1 字节存储顺序 377 
17.5.2 IPv4地址 378 
17.5.3 IPv6地址 380 
17.5.4 IP地址的操作 382 
17.5.5 转换名称到地址 384 
17.5.6 转换地址到名称 395 
17.5.7 监听TCP连接 400 
17.5.8 TCP客户端应用程序 403 
17.6 使用UDP数据报 404 
17.6.1 创建一个UDP套接字 405 
17.6.2 发送和接收数据报 406 
17.6.3 一个简单的tftp服务器 407 
17.7 套接字错误 413 
17.8 旧的网络函数 415 
17.8.1 IPv4地址操作 415 
17.8.2 主机名解析 417 
17.8.3 旧的主机信息查找范例 418 
17.8.4 查找端口号 420 
第18章 时间 423 
18.1 获取时间和日期 423 
18.1.1 时间和日期的表示 423 
18.1.2 时间的转换,格式化和解析 426 
18.1.3 时间的限制 429 
18.2 使用计时器 431 
18.2.1 休眠 431 
18.2.2 间隔计时器 432 
第19章 随机数 436 
19.1 伪随机数 436 
19.2 密码系统和随机数 437 
第20章 虚拟控制台编程 439 
20.1 起步 440 
20.2 发出峰鸣声 442 
20.3 判断终端是否为虚拟控制台 443 
20.4 查找当前虚拟控制台 443 
20.5 管理虚拟控制台的切换 444 
20.6 范例:open命令 447 
第21章 Linux控制台 449 
21.1 权能数据库 450 
21.2 图标,字符和映射 451 
21.3 Linux控制台权能 452 
21.3.1 控制字符 453 
21.3.2 转义字符序列 454 
21.3.3 测试序列 455 
21.3.4 复杂转义字符序列 456 
21.4 直接写屏幕 461 
第22章 编写安全程序 464 
22.1 安全何时重要 464 
安全何时失效 465 
22.2 最小化攻击时机 466 
22.2.1 放弃权限 466 
22.2.2 采用辅助手段 467 
22.2.3 限制文件系统的访问 468 
22.3 常见的安全漏洞 469 
22.3.1 缓冲区溢出 469 
22.3.2 解析文件名 474 
22.3.3 环境变量 474 
22.3.4 运行Shell 475 
22.3.5 创建临时文件 476 
22.3.6 竞争状态和信号处理 478 
22.3.7 关闭文件描述符 478 
22.4 作为守护进程运行 479 
第4部分 开发库 
第23章 字符串的匹配 482 
23.1 匹配任意字符串 482 
23.2 正则表达式 483 
23.2.1 Linux正则表达式 483 
23.2.2 正则表达式的匹配 484 
23.2.3 一个简单的grep示例 489 
第24章 用S-Lang来处理终端 495 
24.1 输入处理 495 
24.1.1 初始化S-Lang的输入处理 496 
24.1.2 恢复终端状态 497 
24.1.3 从终端读取字符 497 
24.1.4 检查未决的输入 498 
24.2 输出处理 498 
24.2.1 初始化屏幕管理 499 
24.2.2 更新显示 499 
24.2.3 移动光标 499 
24.2.4 结束屏幕管理 500 
24.2.5 屏幕管理的框架程序 500 
24.2.6 切换字符集 501 
24.2.7 输出到屏幕 502 
24.2.8 画线和画矩形 503 
24.2.9 使用颜色 505 
第25章 基于散列的数据库函数库 508 
25.1 概述 508 
25.2 基本操作 509 
25.2.1 打开qdbm文件 509 
25.2.2 关闭数据库 510 
25.2.3 获得文件描述符 511 
25.2.4 同步数据库 511 
25.3 读取记录 512 
25.3.1 读取特定的记录 512 
25.3.2 顺序读取记录 513 
25.4 修改数据库 513 
25.4.1 增加记录 513 
25.4.2 删除记录 514 
25.5 实例 514 
第26章 解析命令行选项 521 
26.1 选项表 522 
26.1.1 定义选项 522 
26.1.2 嵌套选项表 525 
26.2 使用选项表 526 
26.2.1 创建上下文 526 
26.2.2 解析命令行 527 
26.2.3 剩余的参数 528 
26.2.4 自动帮助信息 528 
26.3 使用回调(callback) 531 
26.4 错误处理 534 
26.5 选项别名 536 
26.5.1 指定别名 536 
26.5.2 使别名生效 537 
26.6 解析参数字符串 538 
26.7 处理额外参数 538 
26.8 应用程序示例 538 
第27章 运行时动态加载 540 
动态加载接口 541 
示例 544 
第28章 用户识别和验证 546 
28.1 ID到名字的转换 546 
示例:id命令 549 
28.2 可挂接的认证模块 552 
28.2.1 PAM 会话 553 
28.2.2 PAM操作 555 
附 录 
附录A 头文件 564 
附录B ladsh源文件 565 
词汇表 584 
参考文献 593 
索引 597

文档截图

QQ截图20190717171300.jpg

[Linux应用程序开发(第2版)].Michael.K.Johnson等.扫描版[PDF][40.97MB]

一、推荐使用迅雷或快车等多线程下载软件下载本站资源。

二、未登录会员无法下载,登录后可获得更多便利功能,若未注册,请先注册。

三、如果服务器暂不能下载请稍后重试!总是不能下载,请点我报错 ,谢谢合作!

四、本站大部分资源是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站将不对任何资源负法律责任.如果您发现本站有部分资源侵害了您的权益,请速与我们联系,我们将尽快处理.

五、如有其他问题,请加网站设计交流群(点击这里查看交流群 )进行交流。

六、如需转载本站资源,请注明转载来自并附带链接

七、本站部分资源为加密压缩文件,统一解压密码为:www.aizhanzhe.com

下载地址
大家评论