UNIX环境高级编程（第2版）

2005年人民邮电出版社出版的图书
《UNIX环境高级编程（第2版）》是2005年人民邮电出版社出版的图书，作者是W.Richard Stevens。
内容简介
本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的更新版。在本书第1版出版后的十几年中，UNIX行业已经有了巨大的变化，特别是影响UNIX编程接口的有关标准变化很大。本书在保持了前一版的风格的基础上，根据最新的标准对内容进行了修订和增补，反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容，还在此基础上介绍了多个应用示例，包括如何创建数据库函数库以及如何与网络打印机通信等。此外，还在附录中给出了函数原型和部分习题的答案。
本书内容权威，概念清晰，阐述精辟，对于所有层次UNIX程序员都是一本不可或缺的参考书。
作者简介
W.Richard Stevens，备受赞誉的技术作家，生前著有多种经典的传世之作，包括《UNIX网络编程》（两卷本）、《TCP/IP详解》（三卷本）和本书第1版。
尤晋元，上海交通大学计算机科学及工程系教授、博士生导师。在科研方面，主要从事操作系统和分布对象计算技术方面的研究；在教学方面，长期承担操作系统及分布计算等课程的教学工作。主编和翻译了多本操作系统教材和参考书，包括《UNIX操作系统教程》、《UNIX高级编程技术》、《UNIX环境高级编程》和《操作系统：设计与实现》等。
图书目录
第1章　UNIX基础知识　1
1.1　引言　1
1.2　UNIX体系结构　1
1.3　登录　1
1.4　文件和目录　3
1.5　输入和输出　6
1.6　程序和进程　8
1.7　出错处理　10
1.8　用户标识　12
1.9　信号　14
1.10　时间值　15
1.11　系统调用和库函数　16
1.12　小结　17
习题　18
第2章　UNIX标准化及实现　19
2.1　引言　19
2.2　UNIX标准化　19
2.2.1　ISO C　19
2.2.2　IEEE POSIX　20
2.2.3　Single UNIX Specification　25
2.2.4　FIPS　26
2.3　UNIX系统实现　26
2.3.1　SVR4　26
2.3.2　4.4BSD　27
2.3.3　FreeBSD　27
2.3.4　Linux　27
2.3.5　Mac OS X　28
2.3.6　Solaris　28
2.3.7　其他UNIX系统　28
2.4　标准和实现的关系　28
2.5　限制　29
2.5.1　ISO C限制　29
2.5.2　POSIX限制　30
2.5.3　XSI限制　32
2.5.4　sysconf、pathconf和fpathconf函数　32
2.5.5　不确定的运行时限制　38
2.6　选项　42
2.7　功能测试宏　44
2.8　基本系统数据类型　45
2.9　标准之间的冲突　45
2.10　小结　46
习题　46
第3章　文件I/O　47
3.1　引言　47
3.2文件描述符47
3.3　open函数　48
3.4　creat函数　49
3.5　close函数　50
3.6lseek函数50
3.7　read函数　53
3.8write函数54
3.9　I/O的效率　54
3.10　文件共享　56
3.11　原子操作　59
3.12　dup和dup2函数　60
3.13　sync、fsync和fdatasync函数　61
3.14　fcntl函数　62
3.15　ioctl函数　66
3.16　/dev/fd　67
3.17　小结　68
习题　68
第4章　文件和目录　71
4.1　引言　71
4.2　stat、fstat和lstat函数　71
4.3　文件类型　72
4.4　设置用户ID和设置组ID　74
4.5　文件访问权限　75
4.6　新文件和目录的所有权　77
4.7access函数77
4.8　umask函数　79
4.9　chmod和fchmod函数　81
4.10　粘住位　83
4.11　chown、fchown和lchown函数　84
4.12　文件长度　85
4.13　文件截短　86
4.14　文件系统　86
4.15　link、unlink、remove和rename函数　89
4.16　符号链接　91
4.17　symlink和readlink函数　94
4.18　文件的时间　94
4.19　utime函数　95
4.20　mkdir和rmdir函数　97
4.21　读目录　98
4.22　chdir、fchdir和getcwd函数　102
4.23　设备特殊文件　104
4.24　文件访问权限位小结　106
4.25　小结　106
习题　107
第5章标准I/O库109
5.1　引言　109
5.2　流和FILE对象　109
5.3　标准输入、标准输出和标准出错　110
5.4　缓冲　110
5.5　打开流　112
5.6　读和写流　114
5.7　每次一行I/O　116
5.8　标准I/O的效率　117
5.9　二进制I/O　119
5.10　定位流　120
5.11　格式化I/O　121
5.12　实现细节　125
5.13临时文件127
5.14　标准I/O的替代软件130
5.15　小结　130
习题　130
第6章　系统数据文件和信息　133
6.1　引言　133
6.2　口令文件　133
6.3　阴影口令　136
6.4　组文件　137
6.5　附加组ID　138
6.6　实现的区别　139
6.7　其他数据文件　139
6.8　登录账户记录　140
6.9　系统标识　141
6.10　时间和日期例程　142
6.11　小结　146
习题　146
第7章　进程环境　147
7.1　引言　147
7.2main函数147
7.3　进程终止　147
7.4命令行参数151
7.5　环境表　152
7.6　C程序的存储空间布局　152
7.7　共享库　154
7.8　存储器分配　154
7.9　环境变量　157
7.10　setjmp和longjmp函数　159
7.11　getrlimit和setrlimit函数　164
7.12　小结　168
习题　168
第8章　进程控制　171
8.1　引言　171
8.2　进程标识符171
8.3　fork函数　172
8.4　vfork函数　176
8.5　exit函数　178
8.6　wait和waitpid函数　179
8.7　waitid函数　183
8.8　wait3和wait4函数　184
8.9　竞争条件　185
8.10　exec函数　188
8.11　更改用户ID和组ID　192
8.12解释器文件　196
8.13　system函数　200
8.14　进程会计　203
8.15　用户标识　208
8.16　进程时间　208
8.17　小结　210
习题　211
第9章　进程关系　213
9.1　引言　213
9.2　终端登录　213
9.3　网络登录　216
9.4　进程组　218
9.5　会话　219
9.6　控制终端　220
9.7　tcgetpgrp、tcsetpgrp和tcgetsid函数　221
9.8　作业控制　222
9.9　shell执行程序　225
9.10　孤儿进程组　228
9.11　FreeBSD实现　230
9.12　小结　231
习题　232
第10章　信号　233
10.1　引言　233
10.2　信号概念　233
10.3　signal函数　240
10.4　不可靠的信号　242
10.5　中断的系统调用　244
10.6可重入函数246
10.7　SIGCLD语义　248
10.8　可靠信号术语和语义　250
10.9　kill和raise函数　251
10.10　alarm和pause函数252
10.11　信号集　256
10.12　sigprocmask函数　258
10.13　sigpending函数　259
10.14　sigaction函数　261
10.15　sigsetjmp和siglongjmp函数　266
10.16　sigsuspend函数　268
10.17abort函数274
10.18　system函数　276
10.19sleep函数280
10.20　作业控制信号　282
10.21　其他特征　284
10.22　小结　285
习题　285
第11章　线程　287
11.1　引言　287
11.2　线程概念　287
11.3　线程标识　288
11.4　线程的创建　288
11.5　线程终止　291
11.6　线程同步　297
11.7　小结　311
习题　311
第12章　线程控制　313
12.1　引言　313
12.2　线程限制　313
12.3　线程属性　314
12.4　同步属性　318
12.5　重入　324
12.6　线程私有数据　328
12.7　取消选项　331
12.8　线程和信号　333
12.9　线程和fork　336
12.10　线程和I/O　339
12.11　小结　340
习题　340
第13章　守护进程　341
13.1　引言　341
13.2　守护进程的特征　341
13.3　编程规则　342
13.4　出错记录　345
13.5　单实例守护进程　348
13.6　守护进程的惯例　350
13.7　客户进程-服务器进程模型　354
13.8　小结　354
习题　354
第14章　高级I/O　355
14.1　引言　355
14.2　非阻塞I/O　355
14.3　记录锁　357
14.4　STREAMS　370
14.5　I/O多路转接　379
14.5.1　select和pselect函数　381
14.5.2　poll函数　384
14.6　异步I/O　386
14.6.1　系统V异步I/O　386
14.6.2　BSD异步I/O　387
14.7　readv和writev函数　387
14.8　readn和writen函数　389
14.9　存储映射I/O　390
14.10　小结　395
习题　396
第15章进程间通信397
15.1　引言　397
15.2　管道　398
15.3　popen和pclose函数　403
15.4　协同进程　408
15.5　FIFO　412
15.6　XSI IPC　415
15.6.1　标识符和键　415
15.6.2　权限结构　416
15.6.3　结构限制　417
15.6.4　优点和缺点　417
15.7　消息队列　418
15.8信号量422
15.9共享存储427
15.10　客户进程-服务器进程属性　432
15.11　小结　434
习题　434
第16章　网络IPC：套接字　437
16.1　引言　437
16.2　套接字描述符　437
16.3　寻址　439
16.3.1　字节序　440
16.3.2　地址格式　441
16.3.3　地址查询　442
16.3.4　将套接字与地址绑定　449
16.4　建立连接　450
16.5　数据传输　452
16.6　套接字选项　464
16.7　带外数据　466
16.8　非阻塞和异步I/O　467
16.9　小结　468
习题　468
第17章　高级进程间通信　469
17.1　引言　469
17.2　基于STREAMS的管道　469
17.2.1　命名的STREAMS管道　472
17.2.2　唯一连接　473
17.3　UNIX域套接字　476
17.3.1　命名UNIX域套接字　477
17.3.2　唯一连接　478
17.4　传送文件描述符482
17.4.1　经由基于STREAMS的管道传送文件描述符　484
17.4.2　经由UNIX域套接字传送文件描述符　486
17.5　open服务器版本1　493
17.6　open服务器版本2　498
17.7　小结　505
习题　505
第18章　终端I/O　507
18.1　引言　507
18.2　综述　507
18.3　特殊输入字符　512
18.4　获得和设置终端属性　516
18.5　终端选项标志　516
18.6　stty命令　522
18.7波特率函数523
18.8　行控制函数　524
18.9　终端标识　524
18.10　规范模式　529
18.11　非规范模式　532
18.12　终端的窗口大小　537
18.13　termcap，terminfo和curses　539
18.14　小结　540
习题　540
第19章　伪终端　541
19.1　引言　541
19.2　概述　541
19.3　打开伪终端设备　544
19.3.1　基于STREAMS的伪终端　547
19.3.2　基于BSD的伪终端　549
19.3.3　基于Linux的伪终端　551
19.4　pty_fork函数　553
19.5　pty程序　555
19.6　使用pty程序　559
19.7　高级特性　564
19.8　小结　565
习题　565
第20章　数据库函数库　567
20.1　引言　567
20.2　历史　567
20.3　函数库　568
20.4　实现概述　569
20.5　集中式或非集中式　572
20.6　并发　574
20.7　构造函数库　574
20.8源代码575
20.9　性能　598
20.10　小结　600
习题　601
第21章　与网络打印机通信　603
21.1　引言　603
21.2　网络打印协议　603
21.3超文本传输协议605
21.4　打印假脱机技术　605
21.5　源代码　607
21.6　小结　644
习题　645
附录A　函数原型　647
附录B　其他源代码　677
附录C　部分习题答案　685
参考书目　709
索引　715