UNIX环境高级编程(英文版·第3版)
作者 : [美]W. 理查德·史蒂文斯(W. Richard Stevens), 斯蒂芬 A. 拉格(Stephen A. Rago)著
丛书名 : 经典原版书库
出版日期 : 2016-01-07
ISBN : 978-7-111-52387-1
定价 : 159.00元
教辅资源下载
扩展信息
语种 : 英文
页数 : 980
开本 : 16
原书名 : Advanced Programming in the UNIX Environment,Third Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。
《UNIX环境高级编程(第3版)》内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。

图书特色

本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品……总之,这是一本弥足珍贵的经典著作的更新版。
—— Dennis Ritchie,图灵奖得主,UNIX操作系统和C语言之父

最重要的UNIX编程经典之一。
—— Eric S. Raymond,《UNIX编程艺术》作者

对任何一个严谨的、专业的UNIX系统程序员而言,本书都是不可或缺的权威参考书。Rago更新和扩展了Stevens的经典著作,并保持了原书的风貌。书中利用清晰的实例演示了API的使用过程,还提到了许多在不同UNIX系统实现上编程时需要注意的陷阱,并指出如何使用相关的标准来避免这些错误。
—— Andrew Josey, The Open Group标准部门主管,POSIX 1003.1标准工作组主席
本书是被誉为UNIX编程“圣经”的《Advanced Programming in the UNIX Environment》一书的第3版。多年来,严谨的C程序员都是依靠这本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识。
在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。第3版在保持第2版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容外,还介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。
本书帮助了几代程序员写出强大、高性能、可靠的代码,内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。
作者简介
W. 理查德·史蒂文斯(W. Richard Stevens) 国际知名的UNIX和网络专家,备受赞誉的技术作家。生前著有多部经典的传世之作,包括《UNIX网络编程》(两卷本)、《TCP/IP详解》(三卷本)和本书第1版。
斯蒂芬 A. 拉格(Stephen A. Rago) 资深UNIX程序员,目前任NEC美国实验室存储系统集团研究员。之前是贝尔实验室的UNIX系统V版本4的开发人员之一。著有《UNIX系统V网络编程》,并曾担任本书第1版的技术审校和第2版的共同作者。

图书前言

引言
从我第一次修订《UNIX环境高级编程》一书以来已经快有8年了,期间发生了很多的变化。
在出版第2版之前,Open Group完成了2004版的Single UNIX Specification,它涵盖了两套勘误表的修改。2008年,Open Group完成了新版的Single UNIX Specification,它更新了基本定义,添加了新的接口,并且去除了弃用的接口。这套规范被称为2008年版的POSIX.1,其中包含第7版的基本规范,并在2009年发行。2010年,它与更新后的curses接口捆绑,一起作为Single UNIX Specification第4版(SUSv4)进行再版。
运行在Intel处理器上的Mac OS X操作系统的10.5、10.6和10.8版,被Open Group认证为UNIX系统。
苹果公司停止了PowerPC平台上Mac OS X的开发。在10.6发行版(Snow Leopard)之后只针对x86平台发布了新的操作系统版本。
Solaris操作系统以开源的形式发布,试图与FreeBSD、Linux和Mac OS X遵循的开源模式在声望上一争高下。在2010年,Oracle收购了Sun Microsystems之后,OpenSolaris的开发被终止。作为替代,Solaris社区组建了Illumos项目来继续基于OpenSolaris的开源开发。更多详细的信息,可以从http://www.illumos.org获得。
2011年,C语言标准被更新,但是因为系统并未能跟上其变化,本书中依然参照1999版。
最重要的是,在第2版中使用的平台已经过时了。本书这一版中涉及以下平台:
1)FreeBSD 8.0,前身是加州大学伯克利分校计算机系统研究组发布的4.4BSD系统,运行在32位Intel Pentium处理器上。
2)Linux 3.2.0(Ubuntu 12.04发布版),这是一个免费的类UNIX操作系统,运行在64位的Intel Core i5 处理器上。
3)Apple Mac OS X 10.6.8版(Darwin 10.8.0),运行在64位Intel Core2 Duo处理器上(Darwin基于FreeBSD和Mach)。我选择从PowerPC平台转向Intel平台,是因为最新版的Mac OS X不再支持PowerPC平台。这次选择带来的缺点是涉及的处理器倾斜向了Intel,而当讨论到异构性问题时,涉及的处理器如果能在字节序和整数大小等方面有不同的性质将是很有好处的。
4)Solaris 10,Sun Microsystems(现在的Oracle)的System V Release 4的派生系统,运行在64位UltraSPARC IIi处理器上。
与第2版的不同
最大的变化之一是POSIX.1-2008中的Single UNIX Specification弃用了一些STREAMS相关接口。这是准备在该标准的未来版本中去掉全部这些接口的第一步。因此,我已经不情愿地在这一版中删除了STREAMS的内容。这是一个不幸的变化,因为STREAMS接口为socket接口提供了一个很好的对照,并且在很多方面更为灵活。不可否认,当谈论到STREAMS时我并非绝对公正,但是毫无疑问的是,在现有系统中它的分量已经减轻。
Linux基础系统中未包含STREAMS,虽然添加该功能的包(LiS和OpenSS7)是可用的。
虽然Solaris 10中包含了STREAMS,但是Solaris 11的socket实现并没有构建在STREAMS之上。
Mac OS X不包含STREAMS支持。
FreeBSD不包含STREAMS支持(也从未包含过)。
随着STREAMS相关内容的去除,新的主题有机会替代它,例如POSIX异步I/O。
在本书第2版中,Linux版本是基于2.4版的。在这次的版本中,我们已经更新到了3.2版。两个版本的最大不同之一是线程系统。在Linux 2.4和Linux 2.6之间,线程的实现变为Native POSIX Thread Library(NPTL)。NPTL使得Linux线程的行为与其他系统的线程更加相似。
总的来说,这次的版本涵盖了超过70个新的接口,包括处理异步I/O、自旋锁、屏障和POSIX信号量等接口。除了一些普遍使用的接口被保留,大多数弃用的接口均被删除。
致谢
许多读者为第2版发来了评论和错误报告,感谢他们提高了第2版的准确性。下面提及的各位是最早提出建议或者指出错误的:Seth Arnold、Luke Bakken、Rick Ballard、Johannes Bittner、David Bronder、Vlad Buslov、Peter Butler、Yuching Chen、Mike Cheng、Jim Collins、Bob Cousins、Will Dennis、Thomas Dickey、Lo·c Domaigné、Igor Fuksman、Alex Gezerlis、M. Scott Gordon、Timothy Goya、Tony Graham、Michael Hobgood、Michael Kerrisk、Youngho Kwon、Richard Li、Xueke Liu、Yun Long、Dan McGregor、Dylan McNamee、Greg Miller、Simon Morgan、Harry Newton、Jim Oldfield、Scott Parish、Zvezdan Petkovic、David Reiss、Konstantinos Sakoutis、David Smoot、David Somers、Andriy Tkachuk、Nathan Weeks、Florian Weimer、Qingyang Xu和 Michael Zalokar。
技术审校者也提高了内容的准确性,感谢Steve Albert、Bogdan Barbu和Robert Day。特别感谢Geoff Clare和Andrew Josey为Single UNIX Specification的升华和第2章的准确性提供了帮助。另外,感谢Ken Thompson对历史问题做出了解答。
我得再一次说,与Addison-Wesley的工作人员的合作非常愉快。感谢Kim Boedigheimer、Romny French、John Fuller、Jessica Goldstein、Julie Nahil和Debra Williams-Cauley,此外,感谢Jill Hobbs的专业审稿能力。
最后,感谢我的家人对我在这次再版上花费了如此多时间给予的理解。
和以前一样,书中实例的源码可以从www.apuebook.com获得,非常欢迎读者发来邮件,发表评论,提出建议,订正错误。
Stephen A. Rago
sar@apuebook.com
2013年1月于新泽西州沃伦市

上架指导

计算机\操作系统

封底文字

“本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品……总之,这是一本弥足珍贵的经典著作的更新版。”
——Dennis Ritchie,图灵奖得主,UNIX操作系统和C语言之父

“最重要的UNIX编程经典之一。”
——Eric S. Raymond,《UNIX编程艺术》作者

“对任何一个严谨的、专业的UNIX系统程序员而言,本书都是不可或缺的权威参考书。Rago更新和扩展了Stevens的经典著作,并保持了原书的风貌。书中利用清晰的实例演示了API的使用过程,还提到了许多在不同UNIX系统实现上编程时需要注意的陷阱,并指出如何使用相关的标准来避免这些错误。”
——Andrew Josey, The Open Group标准部门主管,POSIX 1003.1标准工作组主席


本书是被誉为UNIX编程“圣经”的《Advanced Programming in the UNIX Environment》一书的第3版。多年来,严谨的C程序员都是依靠这本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识。
在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。第3版在保持第2版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容外,还介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。
本书帮助了几代程序员写出强大、高性能、可靠的代码,内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。


作者简介:

W. 理查德•史蒂文斯(W. Richard Stevens)国际知名的UNIX和网络专家,备受赞誉的技术作家。生前著有多部经典的传世之作,包括《UNIX网络编程》(两卷本)、《TCP/IP详解》(三卷本)和本书第1版。

斯蒂芬 A. 拉格(Stephen A. Rago) 资深UNIX程序员,目前任NEC美国实验室存储系统集团研究员。之前是贝尔实验室的UNIX系统V版本4的开发人员之一。著有《UNIX系统V网络编程》,并曾担任本书第1版的技术审校和第2版的共同作者。

图书目录

第1章 UNIX基础知识 1
1.1 引言 1
1.2 UNIX体系结构 1
1.3 登录 2
1.4 文件和目录 4
1.5 输入和输出 8
1.6 程序和进程 10
1.7 出错处理 14 
1.8 用户标识 16
1.9 信号 18
1.10 时间值 20
1.11 系统调用和库函数 21
1.12 小结 23
第2章 UNIX标准及实现 25
2.1 引言 25
2.2 UNIX标准化 25
2.2.1 ISO C 25
2.2.2 IEEE POSIX 26
2.2.3 Single UNIX Specification 30
2.2.4 FIPS 32
2.3 UNIX系统实现 33
2.3.1 SVR4 33
2.3.2 4.4BSD 34
2.3.3 FreeBSD 34
2.3.4 Linux 35
2.3.5 Mac OS X 35
2.3.6 Solaris 35
2.3.7 其他UNIX系统 35
2.4 标准和实现的关系 36
2.5 限制 36
2.5.1 ISO C限制 37
2.5.2 POSIX限制 38
2.5.3 XSI限制 41
2.5.4 函数sysconf、pathconf和fpathconf  42
2.5.5 不确定的运行时限制 49
2.6 选项 53
2.7 功能测试宏 57
2.8 基本系统数据类型 58
2.9 标准之间的冲突 58
2.10 小结 60
第3章 文件I/O 61
3.1 引言 61
3.2 文件描述符 61
3.3 函数open和openat 62
3.4 函数creat 66
3.5 函数close 66
3.6 函数lseek 66
3.7 函数read 71
3.8 函数write 72
3.9 I/O的效率 72
3.10 文件共享 74
3.11 原子操作 77
3.12 函数dup和dup2 79
3.13 函数sync、fsync和fdatasync 81
3.14 函数fcntl 82
3.15 函数ioctl 87
3.16 /dev/fd 88
3.17 小结 90
第4章 文件和目录 93
4.1 引言 93
4.2 函数stat、fstat、fstatat和lstat 93
4.3 文件类型 95
4.4 设置用户ID和设置组ID 98
4.5 文件访问权限 99
4.6 新文件和目录的所有权 101
4.7 函数access和faccessat 102
4.8 函数umask 104
4.9 函数chmod、fchmod和fchmodat 106
4.10 粘着位 108
4.11 函数chown、fchown、fchownat和lchown 109
4.12 文件长度 111
4.13 文件截断 112
4.14 文件系统 113
4.15 函数link、linkat、unlink、unlinkat和remove 116
4.16 函数rename和renameat 119
4.17 符号链接 120
4.18 创建和读取符号链接 123
4.19 文件的时间 124
4.20 函数futimens、utimensat和
utimes 126
4.21 函数mkdir、mkdirat和rmdir 129
4.22 读目录 130
4.23 函数chdir、fchdir和getcwd 135
4.24 设备特殊文件 137
4.25 文件访问权限位小结 140
4.26 小结 140
第5章 标准I/O库 143
5.1 引言 143
5.2 流和FILE对象 143
5.3 标准输入、标准输出和标准错误 145
5.4 缓冲 145
5.5 打开流 148
5.6 读和写流 150
5.7 每次一行I/O 152
5.8 标准I/O的效率 153
5.9 二进制I/O  156
5.10 定位流 157
5.11 格式化I/O 159
5.12 实现细节 164
5.13 临时文件 167
5.14 内存流 171
5.15 标准I/O的替代软件 174
5.16 小结 175
第6章 系统数据文件和信息 177
6.1 引言 177
6.2 口令文件 177
6.3 阴影口令 181
6.4 组文件 182
6.5 附属组ID 183
6.6 实现区别 184
6.7 其他数据文件 185
6.8 登录账户记录 186
6.9 系统标识 187
6.10 时间和日期例程 189
6.11 小结 196
第7章 进程环境 197
7.1 引言 197
7.2 main函数 197
7.3 进程终止 198
7.4 命令行参数 203
7.5 环境表 203
7.6 C程序的存储空间布局 204
7.7 共享库 206
7.8 存储空间分配 207
7.9 环境变量 210
7.10 函数setjmp和longjmp 213
7.11 函数getrlimit和setrlimit 220
7.12 小结 225
第8章 进程控制 227
8.1 引言 227
8.2 进程标识 227
8.3 函数fork 229
8.4 函数vfork 234
8.5 函数exit 236
8.6 函数wait和waitpid 238
8.7 函数waitid 244
8.8 函数wait3和wait4 245
8.9 竞争条件 245
8.10 函数exec 249
8.11 更改用户ID和更改组ID 255
8.12 解释器文件 260
8.13 函数system 264
8.14 进程记账 269
8.15 用户标识 275
8.16 进程调度 276
8.17 进程时间 280
8.18 小结 282
第9章 进程关系 285
9.1 引言 285
9.2 终端登录 285
9.3 网络登录 290
9.4 进程组 293
9.5 会话 295
9.6 控制终端 296
9.7 函数tcgetpgrp、tcsetpgrp
和tcgetsid 298
9.8 作业控制 299
9.9 shell执行程序 303
9.10 孤儿进程组 307
9.11 FreeBSD实现 310
9.12 小结 312
第10章 信号 313
10.1 引言 313
10.2 信号概念 313
10.3 函数signal 323
10.4 不可靠的信号 326
10.5 中断的系统调用 327
10.6 可重入函数 330
10.7 SIGCLD语义 332
10.8 可靠信号术语和语义 335
10.9 函数kill和raise 336
10.10 函数alarm和pause 338
10.11 信号集 344
10.12 函数sigprocmask 346
10.13 函数sigpending 347
10.14 函数sigaction 349
10.15 函数sigsetjmp和siglongjmp 355
10.16 函数sigsuspend 359
10.17 函数abort 365
10.18 函数system 367
10.19 函数sleep、nanosleep和
clock_nanosleep 373
10.20 函数sigqueue 376
10.21 作业控制信号 377
10.22 信号名和编号 379
10.23 小结 381
第11章 线程 383
11.1 引言 383
11.2 线程概念 383
11.3 线程标识 384
11.4 线程创建 385
11.5 线程终止 388
11.6 线程同步 397
11.6.1 互斥量 399
11.6.2 避免死锁 402
11.6.3 函数pthread_mutex_timedlock 407
11.6.4 读写锁 409
11.6.5 带有超时的读写锁 413
11.6.6 条件变量 413
11.6.7 自旋锁 417
11.6.8 屏障 418
11.7 小结 422
第12章 线程控制 425
12.1 引言 425
12.2 线程限制 425
12.3 线程属性 426
12.4 同步属性 430
12.4.1 互斥量属性 430
12.4.2 读写锁属性 439
12.4.3 条件变量属性 440
12.4.4 屏障属性 441
12.5 重入 442
12.6 线程特定数据 446
12.7 取消选项 451
12.8 线程和信号 453
12.9 线程和fork  457
12.10 线程和I/O 461
12.11 小结 462
第13章 守护进程 463
13.1 引言 463
13.2 守护进程的特征 463
13.3 编程规则 466
13.4 出错记录 469
13.5 单实例守护进程 473
13.6 守护进程的惯例 474
13.7 客户进程–服务器进程模型 479
13.8 小结 480
第14章 高级I/O 481
14.1 引言 481
14.2 非阻塞I/O  481
14.3 记录锁 485
14.4 I/O多路转接 500
14.4.1 函数select和pselect 502
14.4.2 函数poll 506
14.5 异步I/O 509
14.5.1 System V异步I/O 510
14.5.2 BSD异步I/O 510
14.5.3 POSIX异步I/O 511
14.6 函数readv和writev 521
14.7 函数readn和writen 523
14.8 存储映射I/O 525
14.9 小结 531
第15章 进程间通信 533
15.1 引言 533
15.2 管道 534
15.3 函数popen和pclose 541
15.4 协同进程 548
15.5 FIFO 552
15.6 XSI IPC 556
15.6.1 标识符和键 556
15.6.2 权限结构 558
15.6.3 结构限制 559
15.6.4 优点和缺点 559
15.7 消息队列 561
15.8 信号量 565
15.9 共享存储 571
15.10 POSIX信号量 579
15.11 客户进程–服务器进程属性 585
15.12 小结 587
第16章 网络IPC:套接字 589
16.1 引言 589
16.2 套接字描述符 590
16.3 寻址 593
16.3.1 字节序 593
16.3.2 地址格式 595
16.3.3 地址查询 597
16.3.4 将套接字与地址关联 604
16.4 建立连接 605
16.5 数据传输 610
16.6 套接字选项 623
16.7 带外数据 626
16.8 非阻塞和异步I/O 627
16.9 小结 628
第17章 高级进程间通信 629
17.1 引言 629
17.2 UNIX域套接字 629
17.2.1 命名UNIX域套接字 634
17.3 唯一连接 635
17.4 传送文件描述符 642
17.5 open服务器进程第1版 653
17.6 open服务器进程第2版 659
17.7 小结 669
第18章 终端I/O 671
18.1 引言 671
18.2 概述 671
18.3 特殊输入字符 678
18.4 获得和设置终端属性 683
18.5 终端选项标志 683
18.6 stty命令 691
18.7 波特率函数 692
18.8 行控制函数 693
18.9 终端标识 694
18.10 规范模式 700
18.11 非规范模式 703
18.12 终端窗口大小 710
18.13 termcap、terminfo和curses 712
18.14 小结 713
第19章 伪终端 715
19.1 引言 715
19.2 概述 715
19.3 打开伪终端设备 722
19.4 函数pty_fork 726
19.5 pty程序 729
19.6 使用pty程序 733
19.7 高级特性 740
19.8 小结 741
第20章 数据库函数库 743
20.1 引言 743
20.2 历史 743
20.3 函数库 744
20.4 实现概述 746
20.5 集中式或非集中式 750
20.6 并发 752
20.7 构造函数库 753
20.8 源代码 753
20.9 性能 781
20.10 小结 786
第21章 与网络打印机通信 789
21.1 引言 789
21.2 网络打印协议 789
21.3 超文本传输协议HTTP 792
21.4 打印假脱机技术 793
21.5 源代码 795
21.6 小结 843
附录A 函数原型 845
附录B 其他源代码 895
B.1 本书使用的头文件
B.2 标准出错例程
附录C 部分习题答案 905
参考书目 947



Contents
Chapter 1. UNIX System Overview 1
1.1 Introduction 1
1.2 UNIX Architecture 1
1.3 Logging In 2
1.4 Files and Directories 4
1.5 Input and Output 8
1.6 Programs and Processes 10
1.7 Error Handling 14
1.8 User IdentiTcation 16
1.9 Signals 18
1.10 Time Values 20
1.11 System Calls and Librar y Functions 21
1.12 Summary 23
Chapter 2. UNIX Standardization and Implementations 25
2.1 Introduction 25
2.2 UNIX Standardization 25
2.2.1 ISO C 25
2.2.2 IEEE POSIX 26
2.2.3 The Single UNIX SpeciTcation 30
2.2.4 FIPS 32
2.3 UNIX System Implementations 33
2.3.1 UNIX System V Release 4 33
2.3.2 4.4BSD 34
2.3.3 FreeBSD 34
2.3.4 Linux 35
2.3.5 Mac OS X 35
2.3.6 Solaris 35
2.3.7 Other UNIX Systems 35
2.4 Relationship of Standards and Implementations 36
2.5 Limits 36
2.5.1 ISO CLimits 37
2.5.2 POSIX Limits 38
2.5.3 XSI Limits 41
2.5.4sysconf, pathconf,and fpathconfFunctions 42
2.5.5 Indeterminate Runtime Limits 49
2.6 Options 53
2.7 Feature Test Macros 57
2.8 PrimitiveSystem Data Types 58
2.9 Differences Between Standards 58
2.10 Summary 60
Chapter 3. File I/O 61
3.1 Introduction 61
3.2 File Descr iptors 61
3.3 openand openatFunctions 62
3.4 creatFunction 66
3.5 closeFunction 66
3.6 lseekFunction 66
3.7 readFunction 71
3.8 writeFunction 72
3.9 I/OEfTciency 72
3.10 File Shar ing 74
3.11 Atomic Operations 77
3.12 dupand dup2Functions 79
3.13 sync, fsync,and fdatasyncFunctions 81
3.14 fcntlFunction 82
3.15 ioctlFunction 87
3.16 /dev/fd88
3.17 Summary 90
Chapter 4. Files and Directories 93
4.1 Introduction 93
4.2 stat, fstat, fstatat,and lstatFunctions 93
4.3 File Types 95
4.4 Set-User-ID and Set-Group-ID 98
4.5 File Access Per missions 99
4.6 Ownership of NewFiles and Directories 101
4.7 accessand faccessatFunctions 102
4.8 umaskFunction 104
4.9 chmod,fchmod,and fchmodatFunctions 106
4.10 Sticky Bit 108
4.11chown, fchown, fchownat,and lchownFunctions 109
4.12 File Size 111 4.13 File Tr uncation 112
4.14 File Systems 113
4.15link, linkat, unlink, unlinkat,and removeFunctions 116
4.16 renameand renameatFunctions 119
4.17 Symbolic Links 120
4.18 Creating and Reading Symbolic Links 123
4.19 File Times 124
4.20 futimens, utimensat,and utimesFunctions 126
4.21 mkdir, mkdirat,and rmdirFunctions 129
4.22 Reading Director ies 130
4.23 chdir, fchdir,and getcwdFunctions 135
4.24 Device Special Files 137
4.25 SummaryofFile Access Per mission Bits 140
4.26 Summary 140
Chapter 5. StandardI/O Library 143
5.1 Introduction 143
5.2 Streams and FILEObjects 143
5.3 Standard Input, Standard Output, and StandardError 145
5.4 Buffer ing 145
5.5 Opening aStream 148
5.6 Reading and Writing a Stream 150
5.7 Line-at-a-Time I/O 152
5.8 Standard I/O EfTciency 153
5.9 BinaryI/O 156
5.10 Positioning a Stream 157
5.11 For matted I/O 159
5.12 Implementation Details 164
5.13 Temporar y Files 167
5.14 MemoryStreams 171
5.15 Alternatives to Standard I/O 174
5.16 Summary175
Chapter 6. System Data Files and Information
6.1 Introduction 177
6.2 Password File 177
6.3 ShadowPasswords 181
6.4 Group File 182
6.5 SupplementaryGroup IDs 183
6.6 Implementation Differences 184
Implementation
6.7 Other Data Files 185
6.8 Login Accounting 186
6.9 System IdentiTcation 187
6.10 Time and Date Routines 189
6.11 Summary196
Chapter 7. Process Environment 197
7.1 Introduction 197
7.2 mainFunction 197
7.3 Process Termination 198
7.4 Command-Line Arguments 203
7.5 Environment List 203
7.6 MemoryLay out of a C Program 204
7.7 Shared Librar ies 206
7.8 MemoryAllocation 207
7.9 Environment Var iables 210
7.10 setjmpand longjmpFunctions 213
7.11 getrlimitand setrlimitFunctions 220
7.12 Summary225
Chapter 8. Process Control 227
8.1 Introduction 227
8.2 Process IdentiTers 227
8.3 forkFunction 229
8.4 vforkFunction 234
8.5 exitFunctions 236
8.6 waitand waitpidFunctions 238
8.7 waitidFunction 244
8.8 wait3and wait4Functions 245
8.9 Race Conditions 245
8.10 execFunctions 249
8.11 Changing User IDs and Group IDs 255
8.12 Interpreter Files 260
8.13 systemFunction 264
8.14 Process Accounting 269
8.15 User IdentiTcation 275
8.16 Process Scheduling 276
8.17 Process Times 280
8.18 Summary 282
Chapter 9. Process Relationships 285
9.1 Introduction 285 9.2 Ter minal Logins 285
9.3 Networ k Logins 290
9.4 Process Groups 293
9.5 Sessions 295
9.6 Controlling Terminal 296
9.7tcgetpgrp, tcsetpgrp,and tcgetsidFunctions 298
9.8 Job Control 299
9.9 Shell Execution of Programs 303
9.10 Orphaned Process Groups 307
9.11 FreeBSD Implementation 310
9.12 Summary 312
Chapter 10. Signals 313
10.1 Introduction 313
10.2 Signal Concepts 313
10.3 signalFunction 323
10.4 Unreliable Signals 326
10.5 Interrupted System Calls 327
10.6 Reentrant Functions 330
10.7 SIGCLDSemantics 332
10.8 Reliable-Signal Ter minology and Semantics 335
10.9 killand raiseFunctions 336
10.10 alarmand pauseFunctions 338
10.11 Signal Sets 344
10.12 sigprocmaskFunction 346
10.13 sigpendingFunction 347
10.14 sigactionFunction 349
10.15 sigsetjmpand siglongjmpFunctions 355
10.16 sigsuspendFunction 359
10.17 abortFunction 365
10.18 systemFunction 367
10.19sleep, nanosleep,and clock_nanosleepFunctions 373
10.20 sigqueueFunction 376
10.21 Job-Control Signals 377
10.22 Signal Names and Numbers 379
10.23 Summary 381
Chapter 11. Threads
11.1 Introduction 383
11.2 Thread Concepts 383
11.3 Thread IdentiTcation 384
11.4 Thread Creation 385
11.5 Thread Termination 388
11.6 Thread Synchronization 397
11.6.1 Mutexes 399
11.6.2 DeadlockAvoidance 402
11.6.3 pthread_mutex_timedlockFunction 407
11.6.4 Reader–Writer Locks 409
11.6.5 Reader–Writer Locking with Timeouts 413
11.6.6 Condition Variables 413
11.6.7 Spin Locks 417
11.6.8 Barriers 418
11.7 Summary 422
Chapter 12. Thread Control 425
12.1 Introduction 425
12.2 Thread Limits 425
12.3 Thread Attr ibutes 426
12.4 Synchronization Attr ibutes 430
12.4.1 MutexAttr ibutes 430
12.4.2 Reader–Writer LockAttr ibutes 439
12.4.3 Condition Variable Attributes 440
12.4.4 Barrier Attributes 441
12.5 Reentrancy 442
12.6 Thread-SpeciTc Data 446
12.7 Cancel Options 451
12.8 Threads and Signals 453
12.9 Threads and fork457
12.10 Threads and I/O 461
12.11 Summary 462
Chapter 13. Daemon Processes 463
13.1 Introduction 463
13.2 Daemon Character istics 463
13.3 Coding Rules 466
13.4 Error Logging 469
13.5 Single-Instance Daemons 473
13.6 Daemon Conventions 474
13.7 Client–ServerModel 479
13.8 Summary 480
Chapter 14. Advanced I/O 481
14.1 Introduction 481
14.2 Nonblocking I/O 481
14.3 Record Locking 485
14.4 I/O Multiplexing 500
14.4.1 selectand pselectFunctions 502
14.4.2 pollFunction 506
14.5 Asynchronous I/O 509
14.5.1 System VAsynchronous I/O 510
14.5.2 BSD Asynchronous I/O 510
14.5.3 POSIX Asynchronous I/O 511
14.6 readvand writevFunctions 521
14.7 readnand writenFunctions 523
14.8 Memory-Mapped I/O 525
14.9 Summary 531
Chapter 15. Interprocess Communication 533
15.1 Introduction 533
15.2 Pipes 534
15.3 popenand pcloseFunctions 541
15.4 Coprocesses 548
15.5 FIFOs 552
15.6 XSI IPC 556
15.6.1 IdentiTers and Keys 556
15.6.2 Per mission Str ucture 558
15.6.3 ConTguration Limits 559
15.6.4 Advantages and Disadvantages 559
15.7 Message Queues 561
15.8 Semaphores 565
15.9 Shared Memor y 571
15.10 POSIX Semaphores 579
15.11 Client–ServerProper ties 585
15.12 Summary 587
Chapter 16. Network IPC: Sockets 589
16.1 Introduction 589
16.2 SocketDescr iptors 590
16.3 Addressing 593
16.3.1 Byte Order ing 593
16.3.2 Address Formats 595
16.3.3 Address Lookup 597
16.3.4 Associating Addresses with Sockets 604
16.4 Connection Establishment 605
16.5 Data Tr ansfer 610
16.6 SocketOptions 623
16.7 Out-of-Band Data 626
16.8 Nonblocking and Asynchronous I/O 627
16.9 Summary 628
Chapter 17. Advanced IPC 629
17.1 Introduction 629
17.2 UNIX Domain Sockets 629
17.2.1 Naming UNIX Domain Sockets 634
17.3 Unique Connections 635
17.4 Passing File Descriptors 642
17.5 An Open Server, Version 1 653
17.6 An Open Server, Version 2 659
17.7 Summary 669
Chapter 18. Terminal I/O 671
18.1 Introduction 671
18.2 Over view 671
18.3 Special Input Characters 678
18.4 Getting and Setting Ter minal Attr ibutes 683
18.5 Ter minal Option Flags 683
18.6 sttyCommand 691
18.7 Baud Rate Functions 692
18.8 Line Control Functions 693
18.9 Ter minal IdentiTcation 694
18.10 Canonical Mode 700
18.11 Noncanonical Mode 703
18.12 Ter minal WindowSize 710
18.13 termcap, terminfo,and curses712
18.14 Summary 713
Chapter 19. Pseudo Terminals 715
19.1 Introduction 715
19.2 Over view 715
19.3 Opening Pseudo-Ter minal Devices 722
19.4 pty_forkFunction 726
19.5 ptyProgram 729
19.6 Using the ptyProgram 733
19.7 Advanced Features 740
19.8 Summary 741
Chapter 20. ADatabase Library 743
20.1 Introduction 743
20.2 History 743
20.3 The Librar y 744
20.4 Implementation Over view 746
20.5 Centralized or Decentralized 750
20.6 Concurrency 752
20.7 Building the Librar y 753
20.8 Source Code 753
20.9 Perfor mance 781
20.10 Summary 786
Chapter 21. Communicating with a Network Printer 789
21.1 Introduction 789
21.2 The Inter net Pr inting Protocol 789
21.3 The Hyper text Transfer Protocol 792
21.4 Printer Spooling 793
21.5 Source Code 795
21.6 Summary 843
Appendix A. Function Prototypes 845
Appendix B. Miscellaneous Source Code 895
B.1 Our Header File 895
B.2 Standard Error Routines 898
Appendix C. Solutions to Selected Exercises 905
Bibliography 947

教学资源推荐
作者: [比]保罗•德•格劳威(Paul De Grauwe) 著
作者: [美]弗兰克 J. 法博齐(Frank J. Fabozzi),埃德温 H. 尼夫(Edwin H. Neave),[美]周国富(Guofu Zhou) 著