当前位置首页 > 百科> 正文

Linux/UNIX系统编程手册

2019-10-02 09:48:09 百科
Linux/UNIX系统编程手册

Linux/UNIX系统编程手册

《Linux/UNIX系统编程手册》是2014年人民邮电出版社出版的图书,作者是凯利斯克 (Michael Kerrisk)。

基本介绍

  • 书名:Linux/UNIX系统编程手册
  • 又名:THPI
  • 作者:凯利斯克 (Michael Kerrisk)
  • 原版名称:The Linux Programming Interface
  • 译者:孙剑、许从年、董健 (译者)、孙余强 
  • ISBN:9787115328670
  • 页数:1176页
  • 定价:116.40
  • 出版社:人民邮电出版社
  • 出版时间:2014年1月1日
  • 开本:16

内容简介

《Linux/UNIX系统编程手册(上、下册)》是介绍Linux与UNIX编程接口的权威着作。Linux编程资深专家Michael Kerrisk在书中详细描述了Linux/UNIX系统编程所涉及的系统调用和库函式,并辅之以全面而清晰的代码示例。《Linux/UNIX系统编程手册(上、下册)》涵盖了逾500个系统调用及库函式,并给出逾200个程式示例,另含88张表格和115幅示意图。
《Linux/UNIX系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写档案,对信号、时钟和定时器的运用,创建进程、执行程式,编写安全的应用程式,运用POSIX执行绪技术编写多执行绪程式,创建和使用共享库,运用管道、讯息伫列、共享记忆体和信号量技术来进行进程间通信,以及运用套接字API编写网路套用等内容。
《Linux/UNIX系统编程手册(上、下册)》在汇聚大批 Linux专有特性(epoll、inotify、/proc)的同时,还特意强化了对UNIX标準(POSIX、SUS)的论述,彻底达到了“鱼与熊掌,二者得兼”的效果,这也堪称本书的最大亮点。
《Linux/UNIX系统编程手册(上、下册)》布局合理,论述清晰,说理透彻,尤其是作者对示例代码的构思巧妙,独具匠心,仔细研读定会受益良多。本书适合从事Linux/UNIX系统开发、运维工作的技术人员阅读,同时也可作为高校计算机专业学生的参考研习资料。

作者简介

凯利斯克 (Michael Kerrisk),全球顶尖的Linux核心黑客;具有20多年的UNIX系统使用和编程经验;自2004年起,开始维护手册页项目(该项目旨在生成描述Linux核心以及glibc编程API的手册页);撰写或合着了250多篇手册页;极参与对Linux核心/用户空间接口的测试和设计评审工作。

目录


第1章 历史和标準 1
1.1 UNIX和C语言简史 1
1.2 Linux简史 4
1.2.1 GNU项目 4
1.2.2 Linux核心 5
1.3 标準化 8
1.3.1 C程式语言 8
1.3.2 首个POSIX标準 9
1.3.3 X/Open公司和TheOpenGroup 10
1.3.4 SUSv3和POSIX.1—2001 10
1.3.5 SUSv4和POSIX.1—2008 12
1.3.6 UNIX标準时间表 12
1.3.7 实现标準 14
1.3.8 Linux、标準、Linux标準规範(LinuxStandardBase) 14
1.4 总结 15
第2章 基本概念 17
2.1 作业系统的核心—核心 17
2.2 shell 19
2.3 用户和组 20
2.4 单根目录层级、目录、连结及档案 21
2.5 档案I/O模型 23
2.6 程式 24
2.7 进程 25
2.8 记忆体映射 27
2.9 静态库和共享库 28
2.10 进程间通信及同步 28
2.11 信号 29
2.12 执行绪 30
2.13 进程组和shell任务控制 30
2.14 会话、控制终端和控制进程 30
2.15 伪终端 31
2.16 日期和时间 31
2.17 客户端伺服器架构 32
2.18 实时性 32
2.19 proc档案系统 33
2.20 总结 33
第3章 系统编程概念 34
3.1 系统调用 34
3.2 库函式 36
3.3 标準C语言函式馆;GNUC语言函式馆(glibc) 37
3.4 处理来自系统调用和库函式的错误 38
3.5 关于本书示例程式的注意事项 40
3.5.1 命令行选项及参数 40
3.5.2 常用的函式及头档案 40
3.6 可移植性问题 49
3.6.1 特性测试宏 49
3.6.2 系统数据类型 51
3.6.3 其他的可移植性问题 53
3.7 总结 54
3.8 练习 55
第4章 档案I/O:通用的I/O模型 56
4.1 概述 56
4.2 通用I/O 58
4.3 打开一个档案:open() 58
4.3.1 open()调用中的flags参数 60
4.3.2 open()函式的错误 63
4.3.3 creat()系统调用 64
4.4 读取档案内容:read() 64
4.5 数据写入档案:write() 65
4.6 关闭档案:close() 66
4.7 改变档案偏移量:lseek() 66
4.8 通用I/O模型以外的操作:ioctl() 70
4.9 总结 71
4.10 练习 71
第5章 深入探究档案I/O 72
5.1 原子操作和竞争条件 72
5.2 档案控制操作:fcntl() 75
5.3 打开档案的状态标誌 75
5.4 档案描述符和打开档案之间的关係 76
5.5 複製档案描述符 78
5.6 在档案特定偏移量处的I/O:pread()和pwrite() 80
5.7 分散输入和集中输出(Scatter—GatherI/O):readv()和writev() 81
5.8 截断档案:truncate()和ftruncate()系统调用 84
5.9 非阻塞I/O 84
5.10 大档案I/O 85
5.11 /dev/fd目录 88
5.12 创建临时档案 88
5.13 总结 90
5.14 练习 90
第6章 进程 92
6.1 进程和程式 92
6.2 进程号和父进程号 93
6.3 进程记忆体布局 94
6.4 虚拟记忆体管理 97
6.5 栈和栈帧 99
6.6 命令行参数(argc,argv) 99
6.7 环境列表 101
6.8 执行非局部跳转:setjmp()和longjmp() 106
6.9 总结 111
6.9 练习 112
第7章 记忆体分配 113
7.1 在堆上分配记忆体 113
7.1.1 调整programbreak:brk()和sbrk() 113
7.1.2 在堆上分配记忆体:malloc()和free() 114
7.1.3 malloc()和free()的实现 117
7.1.4 在堆上分配记忆体的其他方法 120
7.2 在堆叠上分配记忆体:alloca() 122
7.3 总结 123
7.4 练习 123
第8章 用户和组 124
8.1 密码档案:/etc/passwd 124
8.2 shadow密码档案:/etc/shadow 125
8.3 组档案:/etc/group 126
8.4 获取用户和组的信息 127
8.5 密码加密和用户认证 132
8.6 总结 135
8.7 练习 135
第9章 进程凭证 136
9.1 实际用户ID和实际组ID 136
9.2 有效用户ID和有效组ID 136
9.3 Set—User—ID和Set—Group—ID程式 137
9.4 保存set—user—ID和保存set—group—ID 138
9.5 档案系统用户ID和组ID 139
9.6 辅助组ID 140
9.7 获取和修改进程凭证 140
9.7.1 获取和修改实际、有效和保存设定标识 140
9.7.2 获取和修改档案系统ID 145
9.7.3 获取和修改辅助组ID 145
9.7.4 修改进程凭证的系统调用总结 146
9.7.5 示例:显示进程凭证 148
9.8 总结 149
9.9 习题 150
第10章 时间 151
10.1 日曆时间(CalendarTime) 151
10.2 时间转换函式 153
10.2.1 将time_t转换为可列印格式 153
10.2.2 time_t和分解时间之间的转换 154
10.2.3 分解时间和列印格式之间的转换 155
10.3 时区 161
10.4 地区(Locale) 163
10.5 更新系统时钟 167
10.6 软体时钟(jiffies) 168
10.7 进程时间 168
10.8 总结 171
10.9 练习 172
第11章 系统限制和选项 173
11.1 系统限制 174
11.2 在运行时获取系统限制(和选项) 176
11.3 运行时获取与档案相关的限制(和选项) 178
11.4 不确定的限制 179
11.5 系统选项 180
11.6 总结 181
11.7 练习 182
第12章 系统和进程信息 183
12.1 /proc档案系统 183
12.1.1 获取与进程有关的信息:/proc/PID 183
12.1.2 /proc目录下的系统信息 185
12.1.3 访问/proc档案 186
12.2 系统标识:uname() 188
12.3 总结 190
12.4 练习 190
第13章 档案I/O缓冲 191
13.1 档案I/O的核心缓冲:缓冲区高速快取 191
13.2 stdio库的缓冲 194
13.3 控制档案I/O的核心缓冲 196
13.4 I/O缓冲小结 200
13.5 就I/O模式向核心提出建议 201
13.6 绕过缓冲区高速快取:直接I/O 202
13.7 混合使用库函式和系统调用进行档案I/O 204
13.8 总结 205
13.9 练习 205
第14章 系统编程概念 207
14.1 设备专用档案(设备档案) 207
14.2 磁碟和分区 208
14.3 档案系统 209
14.4 i节点 211
14.5 虚拟档案系统(VFS) 213
14.6 日誌档案系统 214
14.7 单根目录层级和挂载点 215
14.8 档案系统的挂载和卸载 216
14.8.1 挂载档案系统:mount() 217
14.8.2 卸载档案系统:umount()和umount2() 222
14.9 高级挂载特性 223
14.9.1 在多个挂载点挂载档案系统 224
14.9.2 多次挂载同一挂载点 224
14.9.3 基于每次挂载的挂载标誌 225
14.9.4 绑定挂载 225
14.9.5 递归绑定挂载 226
14.10 虚拟记忆体档案系统:tmpfs 227
14.11 获得与档案系统有关的信息:statvfs() 228
14.12 总结 229
14.13 练习 230
第15章 档案属性 231
15.1 获取档案信息:stat() 231
15.2 档案时间戳 236
15.2.1 使用utime()和utimes()来改变档案时间戳 238
15.2.2 使用utimensat()和futimens()改变档案时间戳 239
15.3 档案属主 241
15.3.1 新建档案的属主 241
15.3.2 改变档案属主:chown()、fchown()和lchown() 241
15.4 档案许可权 244
15.4.1 普通档案的许可权 244
15.4.2 目录许可权 246
15.4.3 许可权检查算法 246
15.4.4 检查对档案的访问许可权:access() 248
15.4.5 Set—User—ID、Set—Group—ID和Sticky位 249
15.4.6 进程的档案模式创建掩码:umask() 249
15.4.7 更改档案许可权:chmod()和fchmod() 251
15.5 I节点标誌(ext2扩展档案属性) 252
15.6 总结 256
15.7 练习 256
第16章 扩展属性 258
16.1 概述 258
16.2 扩展属性的实现细节 260
16.3 操控扩展属性的系统调用 260
16.4 总结 264
16.5 练习 264
第17章 访问控制列表 265
17.1 概述 265
17.2 ACL许可权检查算法 267
17.3 ACL的长、短文本格式 268
17.4 ACL_mask型ACE和ACL组分类 269
17.5 getfacl和setfacl命令 270
17.6 默认ACL与档案创建 271
17.7 ACL在实现方面的限制 272
17.8 ACLAPI 273
17.9 总结 280
17.10 练习 280
第18章 目录与连结 281
18.1 目录和(硬)连结 281
18.2 符号(软)连结 283
18.3 创建和移除(硬)连结:link()和unlink() 286
18.4 更改档案名称:rename() 289
18.5 使用符号连结:symlink()和readlink() 290
18.6 创建和移除目录:mkdir()和rmdir() 291
18.7 移除一个档案或目录:remove() 292
18.8 读目录:opendir()和readdir() 292
18.9 档案树遍历:nftw() 297
18.10 进程的当前工作目录 301
18.11 针对目录档案描述符的相关操作 303
18.12 改变进程的根目录:chroot() 304
18.13 解析路径名:realpath() 306
18.14 解析路径名字元串:dirname()和basename() 307
18.15 总结 309
18.16 练习 309
第19章 监控档案事件 311
19.1 概述 311
19.2 inotifyAPI 312
19.3 inotify事件 313
19.4 读取inotify事件 315
19.5 伫列限制和/proc档案 319
19.6 监控档案的旧有系统:dnotify 320
19.7 总结 320
19.8 练习 320
第20章 信号:基本概念 321
20.1 概念和概述 321
20.2 信号类型和默认行为 323
20.3 改变信号处置:signal() 329
20.4 信号处理器简介 330
20.5 传送信号:kill() 333
20.6 检查进程的存在 334
20.7 传送信号的其他方式:raise()和killpg() 335
20.8 显示信号描述 336
20.9 信号集 337
20.10 信号掩码(阻塞信号传递) 339
20.11 处于等待状态的信号 341
20.12 不对信号进行排队处理 341
20.13 改变信号处置:sigaction() 345
20.14 等待信号:pause() 346
20.15 总结 347
20.16 练习 347
第21章 信号:信号处理器函式 348
21.1 设计信号处理器函式 348
21.1.1 再论信号的非伫列化处理 348
21.1.2 可重入函式和异步信号安全函式 349
21.1.3 全局变数和sig_atomic_t数据类型 353
21.2 终止信号处理器函式的其他方法 354
21.2.1 在信号处理器函式中执行非本地跳转 354
21.2.2 异常终止进程:abort() 358
21.3 在备选栈中处理信号:sigaltstack() 358
21.4 SA_SIGINFO标誌 361
21.5 系统调用的中断和重启 366
21.6 总结 368
21.7 练习 369
第22章 信号:高级特性 370
22.1 核心转储档案 370
22.2 传递、处置及处理的特殊情况 372
22.3 可中断和不可中断的进程睡眠状态 373
22.4 硬体产生的信号 374
22.5 信号的同步生成和异步生成 374
22.6 信号传递的时机与顺序 375
22.7 signal()的实现及可移植性 376
22.8 实时信号 378
22.8.1 传送实时信号 379
22.8.2 处理实时信号 380
22.9 使用掩码来等待信号:sigsuspend() 384
22.10 以同步方式等待信号 387
22.11 通过档案描述符来获取信号 390
22.12 利用信号进行进程间通信 393
22.13 早期的信号API(SystemV和BSD) 393
22.14 总结 395
22.15 练习 396
……
第23章 定时器与休眠 397
第24章 进程的创建 425
第25章 进程的终止 440
第26章 监控子进程 447
第27章 程式的执行 465
第28章 详述进程创建和程式执行 487
第29章 执行绪:介绍 509
第30章 执行绪:执行绪同步 521
第31章 执行绪:执行绪安全和每执行绪存储 539
第32章 执行绪:执行绪取消 552
第33章 执行绪:更多细节 561
……
《Linux/UNIX系统编程手册(下册)》
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net