图书介绍
Linux/UNIX系统编程手册 上PDF|Epub|txt|kindle电子书版本网盘下载
- (德)MICHAELKERRISK著;孙剑,许从年,董健等译 著
- 出版社: 北京:人民邮电出版社
- ISBN:7115328670
- 出版时间:2014
- 标注页数:572页
- 文件大小:297MB
- 文件页数:601页
- 主题词:LINUX操作系统-程序设计-手册-UNIX操作系统
PDF下载
下载说明
Linux/UNIX系统编程手册 上PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第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公司和The Open Group10
1.3.4 SUSv3和POSIX.1-200110
1.3.5 SUSv4和POSIX.1-200812
1.3.6 UNIX标准时间表12
1.3.7 实现标准14
1.3.8 Linux、标准、Linux标准规范(Linux Standard Base)14
1.4 总结15
第2章 基本概念17
2.1 操作系统的核心——内核17
2.2 shell19
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语言函数库;GNU C语言函数库(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/O58
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/O72
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-Gather I/O):readv()和writev()81
5.8 截断文件:truncate()和ftruncate()系统调用84
5.9 非阻塞I/O84
5.10 大文件I/O85
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 调整program break: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/passwd124
8.2 shadow密码文件:/etc/shadow125
8.3 组文件:/etc/group126
8.4 获取用户和组的信息127
8.5 密码加密和用户认证132
8.6 总结135
8.7 练习135
第9章 进程凭证136
9.1 实际用户ID和实际组ID136
9.2 有效用户ID和有效组ID136
9.3 Set-User-ID和Set-Group-ID程序137
9.4 保存set-user-ID和保存set-group-ID138
9.5 文件系统用户ID和组ID139
9.6 辅助组ID140
9.7 获取和修改进程凭证140
9.7.1 获取和修改实际、有效和保存设置标识140
9.7.2 获取和修改文件系统ID145
9.7.3 获取和修改辅助组ID145
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/PID183
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/O202
13.7 混合使用库函数和系统调用进行文件I/O204
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 虚拟内存文件系统:tmpfs227
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 ACLmask型ACE和ACL组分类269
17.5 getfacl和setfacl命令270
17.6 默认ACL与文件创建271
17.7 ACL在实现方面的限制272
17.8 ACLAPI273
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 inotify API312
19.3 inotify事件313
19.4 读取inotify事件315
19.5 队列限制和/proc文件319
19.6 监控文件的旧有系统:dnotify320
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(System V和BSD)393
22.14 总结395
22.15 练习396
第23章 定时器与休眠397
23.1 间隔定时器397
23.2 定时器的调度及精度402
23.3 为阻塞操作设置超时402
23.4 暂停运行(休眠)一段固定时间404
23.4.1 低分辨率休眠:sleep()404
23.4.2 高分辨率休眠:nanosleep()404
23.5 POSIX时钟407
23.5.1 获取时钟的值:clock_gettime()407
23.5.2 设置时钟的值:clock_settime()408
23.5.3 获取特定进程或线程的时钟ID408
23.5.4 高分辨率休眠的改进版:clock_nanosleep()409
23.6 POSIX间隔式定时器410
23.6.1 创建定时器:timer_create()410
23.6.2 配备和解除定时器:timer_settime()412
23.6.3 获取定时器的当前值:timer_gettime()413
23.6.4 删除定时器:timer_delete()413
23.6.5 通过信号发出通知414
23.6.6 定时器溢出417
23.6.7 通过线程来通知417
23.7 利用文件描述符进行通知的定时器:timerfd API420
23.8 总结423
23.9 练习424
第24章 进程的创建425
24.1 fork()、exit()、wait()以及execve()的简介425
24.2 创建新进程:fork()427
24.2.1 父、子进程间的文件共享428
24.2.2 fork()的内存语义430
24.3 系统调用vfork()433
24.4 fork()之后的竞争条件(Race Condition)434
24.5 同步信号以规避竞争条件436
24.6 总结438
24.7 练习439
第25章 进程的终止440
25.1 进程的终止:_exit()和exit()440
25.2 进程终止的细节441
25.3 退出处理程序442
25.4 fork()、stdio缓冲区以及_exit()之间的交互445
25.5 总结446
25.6 练习446
第26章 监控子进程447
26.1 等待子进程447
26.1.1 系统调用wait()447
26.1.2 系统调用waitpid()449
26.1.3 等待状态值450
26.1.4 从信号处理程序中终止进程454
26.1.5 系统调用waitid()455
26.1.6 系统调用wait3()和wait4()456
26.2 孤儿进程与僵尸进程457
26.3 SIGCHLD信号459
26.3.1 为SIGCHLD建立信号处理程序459
26.3.2 向已停止的子进程发送SIGCHLD信号462
26.3.3 忽略终止的子进程462
26.4 总结464
26.5 练习464
第27章 程序的执行465
27.1 执行新程序:execve()465
27.2 exec()库函数468
27.2.1 环境变量PATH469
27.2.2 将程序参数指定为列表470
27.2.3 将调用者的环境传递给新程序471
27.2.4 执行由文件描述符指代的程序:fexecve()471
27.3 解释器脚本472
27.4 文件描述符与exec()474
27.5 信号与exec()477
27.6 执行shell命令:system()477
27.7 system()的实现480
27.8 总结485
27.9 练习485
第28章 详述进程创建和程序执行487
28.1 进程记账487
28.2 系统调用clone()493
28.2.1 clone()的flags参数497
28.2.2 因克隆生成的子进程而对waitpid()进行的扩展503
28.3 进程的创建速度503
28.4 exec()和fork()对进程属性的影响505
28.5 总结508
28.6 练习508
第29章 线程:介绍509
29.1 概述509
29.2 Pthreads API的详细背景511
29.3 创建线程513
29.4 终止线程514
29.5 线程ID(Thread ID)514
29.6 连接(joining)已终止的线程515
29.7 线程的分离517
29.8 线程属性518
29.9 线程VS进程518
29.10 总结519
29.11 练习519
第30章 线程:线程同步521
30.1 保护对共享变量的访问:互斥量521
30.1.1 静态分配的互斥量524
30.1.2 加锁和解锁互斥量524
30.1.3 互斥量的性能526
30.1.4 互斥量的死锁527
30.1.5 动态初始化互斥量527
30.1.6 互斥量的属性528
30.1.7 互斥量类型528
30.2 通知状态的改变:条件变量(Condition Variable)529
30.2.1 由静态分配的条件变量530
30.2.2 通知和等待条件变量531
30.2.3 测试条件变量的判断条件(predicate)534
30.2.4 示例程序:连接任意已终止线程534
30.2.5 经由动态分配的条件变量537
30.3 总结538
30.4 练习538
第31章 线程:线程安全和每线程存储539
31.1 线程安全(再论可重入性)539
31.2 一次性初始化541
31.3 线程特有数据542
31.3.1 库函数视角下的线程特有数据542
31.3.2 线程特有数据API概述543
31.3.3 线程特有数据API详述543
31.3.4 使用线程特有数据API545
31.3.5 线程特有数据的实现限制549
31.4 线程局部存储549
31.5 总结550
31.6 练习551
第32章 线程:线程取消552
32.1 取消一个线程552
32.2 取消状态及类型552
32.3 取消点553
32.4 线程可取消性的检测556
32.5 清理函数(cleanup handler)556
32.6 异步取消559
32.7 总结560
第33章 线程:更多细节561
33.1 线程栈561
33.2 线程和信号562
33.2.1 UNIX信号模型如何映射到线程中562
33.2.2 操作线程信号掩码563
33.2.3 向线程发送信号563
33.2.4 妥善处理异步信号564
33.3 线程和进程控制564
33.4 线程实现模型566
33.5 Linux POSIX线程的实现567
33.5.1 LinuxThreads567
33.5.2 NPTL569
33.5.3 哪一种线程实现570
33.6 PthreadAPI的高级特性572
33.7 总结572
33.8 练习572