《UNIX系统编程》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)Kay A.Robbins,(美)Steven Robbins著;陈涓,赵振平译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2005
  • ISBN:7111161904
  • 页数:656 页
图书介绍:本书是基于最新的UNIX标准的参考书(教程),内容完全覆盖与文件、信号量、POSIX线程和客户机-服务器通信等相关的内容,并对通信、并发和多线程问题进行了透彻的分析与研究。

目录出版者的话专家指导委员会译者序前言第一部分 基础知识第1章 技术对程序的冲击 1

1.1 变化中的术语 1

1.2 时间和速度 2

1.3 多道程序设计和分时 3

1.4 应用层的并发 5

1.4.1 中断 5

1.4.2 信号 5

1.4.3 输入和输出 6

1.4.4 进程、线程和资源共享 6

1.4.5 共享内存的多个处理器 6

1.5 安全和容错 7

1.4.6 网络作为计算机 7

1.6 侵入带来的缓冲区溢出 8

1.6.1 缓冲区溢出的后果 9

1.6.2 缓冲区溢出与安全 10

1.7 UNIX标准 11

1.8 扩展阅读 12

第2章 程序、进程和线程 14

2.1 程序怎样转换成进程 14

2.2 线程和执行线程 15

2.3 程序映像的布局 15

2.4 库函数调用 17

2.5 函数返回值和错误 20

2.6 参数数组 21

2.6.1 用makeargv创建参数数组 22

2.6.2 makeargv的实现 23

2.7 线程安全的函数 26

2.8 静态变量的使用 28

2.9 静态对象的结构 29

2.10 进程环境 34

2.11 进程终止 36

2 12 练习:一个env工具 38

2.13 练习:消息日志 39

2.14 扩展阅读 40

第3章 UNIX系统中的进程 41

3.1 进程标识 41

3.2 进程状态 42

3.3 UNIX进程的创建与fork调用 44

3.4 wait函数 49

3.5 exec函数 55

3.6 后台进程与守护进程 59

3.7 临界区 61

3.8 练习:进程链 61

3.9 练习:进程扇 62

3.10 扩展阅读 63

第4章 UNIX I/O 64

4.1 设备术语 64

4.2 读和写 64

4.3 打开和关闭文件 72

4.4 select函数 76

4.5 poll函数 82

4.6 文件表示 84

4.6.1 文件描述符 85

4.6.2 文件指针和缓冲 87

4.6.3 文件描述符的继承 88

4.7 过滤器和重定向 92

4.8 文件控制 94

4.9 练习:原子日志 97

4.10 练习:cat工具 102

4.11 扩展阅读 103

第5章 文件和目录 104

5.1 UNIX文件系统导航 104

5.1.1 当前工作目录 105

5.2 目录访问 108

5.1.2 搜索路径 108

5.2.1 访问文件状态信息 110

5.2.2 确定文件的类型 113

5.3 UNIX文件系统的实现 113

5.3.1 UNIX文件的实现 114

5.3.2 目录的实现 116

5.4 硬链接和符号链接 116

5.4.1 创建或删除一个链接 117

5.4.2 创建和删除符号链接 120

5.5 练习:which命令 125

5.6 练习:通知程序 125

5.7 练习:news biff程序 127

5.8 练习:遍历目录 128

5.9 扩展阅读 130

第6章 UNIX特殊文件 131

6.1 管道 131

6.2 流水线 134

6.3 FIFO 137

6.4 管道与客户机-服务器模型 140

6.5 终端控制 146

6.6 音频设备 154

6.7 练习:音频 158

6.8 练习:路障 160

6.9 练习:stty命令 161

6.11 扩展阅读 162

6.10 练习:重温客户机-服务器 162

第7章 项目:令牌环 163

7.1 环形拓扑 163

7.2 环的形成 164

7.3 环的研究 169

7.4 简单的通信 170

7.5 用令牌实现互斥 171

7.6 用投票实现互斥 172

7.7 匿名环中的领导者选举 173

7.8 通信中使用的令牌环 174

7.9 应用流水线技术的预处理器 176

7.10 并行环算法 177

7.10.1 图像过滤 178

7.10.2 矩阵乘法 179

7.11 弹性环 180

7.12 扩展阅读 181

第二部分 异步事件第8章 信号 183

8.1 信号的基本概念 183

8.2 产生信号 184

8.3 对信号掩码和信号集进行操作 187

8.4 捕捉与忽略信号——sigaction 192

8.5 等待信号——pause、sigsuspend和sigwait 197

8.5.1 pause函数 197

8.5.2 sigsuspend函数 198

8.5.3 sigwait函数 204

8.6 信号处理:错误和异步信号安全 205

8.7 用siglongjmp和sigsetjmp进行程序控制 207

8.8 用异步I/O编程 209

8.9 练习:转储统计 218

8.10 练习:同时操作慢速设备 218

8.11 扩展阅读 219

第9章 时间和定时器 220

9.1 POSIX时间 220

9.1.1 用从Epoch开始的秒数来表示时间 220

9.1.2 显示日期和时间 221

9.1.3 用struct timeval来表示时间 223

9.1.4 使用实时时钟 225

9.1.5 实耗时间和处理器时间的对比 227

9.2 睡眠函数 230

9.3 POSIX:XSI间隔定时器 231

9.4 实时信号 235

9.5 POSIX:TMR间隔定时器 238

9.6 定时器漂移、超限和绝对时间 242

9.7 扩展阅读 250

第10章 项目:虚拟定时器 251

10.1 项目概述 251

10.2 简单的定时器 253

10.3 对五个定时器中的一个进行设置 254

10.3.1 virtualtimers对象 254

10.3.2 hardwaretimer对象 256

10.3.3 主程序的实现 257

10.3.4 用show来置入定时器代码 257

10.4 使用多个定时器 262

10.4.1 设置多个定时器 263

10.4.2 用多个定时器进行测试 264

10.5 多定时器的健壮实现 266

10.6 POSIX:TMR定时器的实现 268

10.7 mycron,一个小型的任务调度工具 269

10.8 扩展阅读 269

第11章 项目:破解命令解释程序 270

11.1 建造一个简单的命令解释程序 270

11.2 重定向 274

11.3 流水线 275

11.4 前台的信号处理 278

11.5.1 进程组 283

11.5 进程组、会话和控制终端 283

11.5.2 会话 284

11.6 ush中的后台进程 287

11.7 作业控制 293

11.8 ush的作业控制 295

11.8.1 一个作业列表对象 295

11.8.2 ush中的作业列表 296

11.8.3 ush中的作业控制 297

11.8.4 等待流水线时的进程行为 297

11.9 扩展阅读 298

第三部分 并发第12章 POSIX线程 299

12.1 监视多个文件描述符的方法 299

12.2 使用线程来监视多个文件描述符 300

12.3 线程管理 302

12.3.1 用ID引用线程 303

12.3.2 创建一个线程 304

12.3.3 分离和连接 305

12.3.4 退出和取消 306

12.3.5 向线程中传递参数并将值返回 309

12.4 线程安全 315

12.5 用户线程和内核线程 316

12.6 线程的属性 318

12.6.1 线程状态 319

12.6.2 线程栈 320

12.6.3 线程调度 321

12.7 练习:并行文件拷贝 324

12.8 扩展阅读 325

第13章 线程同步 326

13.1 POSIX同步函数 326

13.2 互斥锁 326

13.2.1 创建并初始化一个互斥量 327

13.2.2 销毁一个互斥量 328

13.2.3 对互斥量的锁定和解锁 329

13.2.4 保护不安全的库函数 330

13.2.5 对标志符和全局值的同步 331

13.2.6 使数据结构成为线程安全的 335

13.3 最多一次和至少一次的执行 336

13.4 条件变量 340

13.4.1 创建和销毁条件变量 341

13.4.2 等待并通知条件变量 342

13.5 信号处理与线程 345

13.5.1 将信号定向到一个特定的线程中去 346

13.5.2 为线程屏蔽信号 346

13.5.3 为信号处理指定专用线程 347

13.6 读者和写者 349

13.7 strerror_r的实现 353

13.8 死锁和其他比较麻烦的问题 354

13.9 练习:多个路障 355

13.10 扩展阅读 356

第14章 临界区和信号量 357

14.1 处理临界区 357

14.2 信号量 359

14.3 POSIX:SEM无名信号量 361

14.4 POSIX:SEM信号量操作 363

14.5 POSIX:SEM命名信号量 368

14.5.1 创建并打开命名信号量 368

14.5.2 关闭并删除命名信号量 370

14.6 练习:许可证管理器 372

14.6.1 许可证对象 372

14.6.2 runsim主程序 373

14.6.3 对许可证管理器的扩展 373

14.7 扩展阅读 373

15.1 POSIX:XSI进程间通信 374

15.1.1 标识并访问IPC对象 374

第15章 POSIX IPC 374

15.1.2 从命令解释程序中访问POSIX:XSI IPC资源 375

15.2 POSIX:XSI信号量集 376

15.2.1 信号量集的创建 376

15.2.2 信号量集控制 378

15.2.3 POSIX信号量集操作 380

15.3 POSIX:XSI共享内存 384

15.3.1 访问一个共享的内存段 385

15.3.2 共享内存段的连接和分离 385

15.3.3 控制共享内存 386

15.3.4 共享内存实例 387

15.4 POSIX:XSI消息队列 392

15.6 练习:POSIX命名信号量 398

15.5 练习:POSIX无名信号量 398

15.7 练习:用共享内存实现管道 399

15.8 练习:用消息队列实现管道 401

15.9 扩展阅读 402

第16章 项目:生产者消费者同步 403

16.1 生产者-消费者问题 403

16.2 受互斥锁保护的有限缓冲区 404

16.3 使用信号量的缓冲区实现 406

16.4 一个简单的生产者-消费者问题 411

16.5 使用条件变量的有限缓冲区实现 414

16.6 带有完成条件的缓冲区 414

16.7.1 执行并行文件拷贝的生产者 421

16.7 并行文件拷贝 421

16.7.2 执行并行文件拷贝的消费者 422

16.7.3 执行并行文件拷贝的main程序 422

16.7.4 对并行文件拷贝的增强 422

16.8 线程化打印服务器 423

16.8.1 请求缓冲区 424

16.8.2 生产者线程 425

16.8.3 消费者线程 425

16.8.4 打印服务器 425

16.8.5 其他的增强功能 425

16.9 扩展阅读 426

第17章 项目:非完全并行虚拟机 427

17.1 PVM的历史、术语和结构 427

17.2 非完全并行虚拟机 429

17.3 NTPVM项目概述 430

17.3.1 NEWTASK分组 432

17.3.2 DATA分组 432

17.3.3 DONE分组 433

17.4 调度程序的I/O和测试 433

17.4.1 用多个窗口进行测试 437

17.4.2 用远程日志进行测试 439

17.5 没有输入的单任务 440

17.6 串行的任务 440

17.6.1 输入线程 441

17.6.2 输出线程 442

17.7 并发的任务 442

17.8 分组通信、广播和路障 443

17.9 终止和信号 444

17.10 有序的消息传递 444

17.11 扩展阅读 444

第四部分 通信第18章 面向连接的通信 445

18.1 客户机-服务器模型 445

18.2 通信信道 446

18.3 面向连接的服务器策略 448

18.4 通用因特网通信接口 450

18.4.1 错误处理 452

18.4.2 读和写 452

18.5 不同服务器策略的UICI实现 452

18.6 UICI客户机 455

18.7 UICI的套接字实现 459

18.7.1 socket函数 460

18.7.2 bind函数 460

18.7.3 listen函数 461

18.7.4 u_open的实现 462

18.7.5 accept函数 463

18.7.6 u_accept的实现 464

18.7.7 connect函数 465

18.7.8 u_connect的实现 466

18.8 主机名和IP地址 468

18.9 线程安全的UICI 475

18.10 练习:ping服务器 476

18.11 练习:音频的传输 478

18.12 扩展阅读 479

第19章 项目:WWW重定向 480

19.1 万维网 480

19.2 统一资源定位符 481

19.3 HTTP入门 482

19.3.1 客户请求 483

19.3.2 服务器响应 483

19.3.3 HTTP消息交换 484

19.4 Web通信模式 485

19.4.1 隧道 486

19.4.2 代理 487

19.4.3 高速缓存和透明性 488

19.4.4 网关 489

19.5 单连接的通过型监视器 490

19.6 隧道服务器的实现 492

19.7 用于测试的服务器驱动程序 493

19.8 HTTP首部的解析 494

19.9 简单的代理服务器 495

19.10 代理监视器 496

19.11 代理高速缓存 499

19.12 门户网关 499

19.13 用于负载平衡的网关 500

19.14 事后的调查分析 500

19.14.1 线程和时序错误 501

19.14.2 未捕捉到的错误和错误的退出 501

19.14.4 拙劣的测试及结果的表示 502

19.14.3 书写风格和表示方法 502

19.14.5 编程错误和不好的风格 503

19.15 扩展阅读 504

第20章 无连接通信和多播 505

20.1 无连接通信入门 505

20.2 无连接通信的简化接口 506

20.2.1 主机名和u_buf_t结构 507

20.2.2 UICI UDP的各种返回错误值 508

20.2.3 UDP缓冲区大小与UICI UDP 508

20.3 简单-请求协议 508

20.4 请求-应答协议 513

20.5 有超时和重试机制的请求-应答协议 517

20.6 请求-应答-确认协议 521

20.7 UICI UDP的实现 522

20.7.1 u_openudp的实现 522

20.7.2 sendto函数 523

20.7.3 u_sendto和u_sendtohost的实现 524

20.7.4 recvfrom函数 525

20.7.5 u_recvfrom和u_recvfromtimed的实现 526

20.7.6 主机名和u_buf_t 527

20.8 UDP和TCP的比较 528

20.9 多播 529

20.9.1 多播编址 530

20.9.2 u_join的实现 531

20.10 练习:UDP端口服务器 532

20.9.3 u_leave的实现 532

20.11 练习:无状态文件服务器 533

20.12 扩展阅读 535

第21章 项目:因特网音频广播 536

21.1 项目概述 536

21.2 音频设备模拟 538

21.3 单节目和单接收者的UDP实现 538

21.3.1 简单实现 538

21.3.2 接收者如何终止 540

21.3.3 接收者进行缓冲以解决网络延迟问题 541

21.3.4 接收者进行缓冲以解决乱序传送的问题 542

21.4 多节目和多接收者的UDP实现 545

21.4.1 多节目单接收者 545

21.5 音频广播的UDP实现 546

21.4.2 多节目多接收者 546

21.6 音频广播的多播实现 547

21.7 TCP实现的差异 548

21.7.1 单节目单接收者的TCP实现 548

21.7.2 多节目单接收者的TCP实现 549

21.7.3 音频广播的TCP实现 549

21.8 通过浏览器接收流式音频 551

21.8.1 使用浏览器助手程序 551

21.8.4 创建Web页面 553

21.8.5 使用预定义的MIME类型 553

21.8.3 设置浏览器以支持新的MIME类型 553

21.8.2 为Web服务器设置一个新的MIME类型 553

21.9 扩展阅读 554

第22章 项目:服务器性能 555

22.1 服务器性能的代价 555

22.2 服务器体系结构 555

22.3 项目概述 559

22.4 单客户端驱动程序 559

22.4.1 处理一个连接 559

22.4.2 响应编程 560

22.4.3 收集统计信息 560

22.4.4 对客户端做测试 561

22.5 多客户端驱动程序 561

22.6 实现每个请求一个线程和每个请求一个进程 563

22.8 使用有界缓冲的多线程工作者池 564

22.7 多线程工作者池策略 564

22.9 多进程工作者池 565

22.10 磁盘I/O的影响 565

22.11 性能研究 568

22.11.1 基线测量 568

22.11.2 波动性的根源 569

22.11.3 测量的各种错误 569

22.11.4 同步 571

22.11.5 很简单的错误 572

22.11.6 该测量哪些项目 573

22.11.7 数据分析和表达 575

22.12 书写报告 575

22.12.1 引言 575

22.12.4 结果及分析 576

22.12.2 设计、实现和测试 576

22.12.3 实验 576

22.12.5 结论 577

22.12.6 参考文献 577

22.13 扩展阅读 577

附录A UN?X基础 578

附录B 重启库 591

附录C UICI的实现 599

附录D 志函数 612

附录E POSIX扩展 626

参考文献 628

程序索引 636

索引 639