图书介绍

Linux/UNIX系统编程手册 上PDF|Epub|txt|kindle电子书版本网盘下载

Linux/UNIX系统编程手册 上
  • (德)MICHAELKERRISK著;孙剑,许从年,董健等译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115328670
  • 出版时间:2014
  • 标注页数:572页
  • 文件大小:297MB
  • 文件页数:601页
  • 主题词:LINUX操作系统-程序设计-手册-UNIX操作系统

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐