本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。 <br><br>目 录<br>译者序<br>译者简介<br>前言<br>第1章 UNIX基础知识 1<br>1.1 引言 1<br>1.2 登录 1<br>1.2.1 登录名 1<br>1.2.2 shell 1<br>1.3 文件和目录 2<br>1.3.1 文件系统 2<br>1.3.2 文件名 2<br>1.3.3 路径名 2<br>1.3.4 工作目录 4<br>1.3.5 起始目录 4<br>1.4 输入和输出 5<br>1.4.1 文件描述符 5<br>1.4.2 标准输入、标准输出和标准<br> 出错 5<br>1.4.3 不用缓存的I/O 5<br>1.4.4 标准I/O 6<br>1.5 程序和进程 7<br>1.5.1 程序 7<br>1.5.2 进程和进程ID 7<br>1.5.3 进程控制 7<br>1.6 ANSI C 9<br>1.6.1 函数原型 9<br>1.6.2 类属指针 9<br>1.6.3 原始系统数据类型 10<br>1.7 出错处理 10<br>1.8 用户标识 11<br>1.8.1 用户ID 11<br>1.8.2 组ID 12<br>1.8.3 添加组ID 12<br>1.9 信号 12<br>1.10 UNIX时间值 14<br>1.11 系统调用和库函数 14<br>1.12 小结 16<br>习题 16<br>第2章 UNIX标准化及实现 17<br>2.1 引言 17<br>2.2 UNIX标准化 17<br>2.2.1 ANSI C 17<br>2.2.2 IEEE POSIX 18<br>2.2.3 X/Open XPG3 19<br>2.2.4 FIPS 19<br>2.3 UNIX实现 19<br>2.3.1 SVR4 20<br>2.3.2 4.3+BSD 20<br>2.4 标准和实现的关系 21<br>2.5 限制 21<br>2.5.1 ANSI C限制 22<br>2.5.2 POSIX限制 22<br>2.5.3 XPG3限制 24<br>2.5.4 sysconf、pathconf 和fpathconf<br>函数 24<br>2.5.5 FIPS 151-1要求 28<br>2.5.6 限制总结 28<br>2.5.7 未确定的运行时间限制 29<br>2.6 功能测试宏 32<br>2.7 基本系统数据类型 32<br>2.8 标准之间的冲突 33<br>2.9 小结 34<br>习题 34<br>第3章 文件I/O 35<br>3.1 引言 35<br>3.2 文件描述符 35<br>3.3 open函数 35<br>3.4 creat函数 37<br>3.5 close函数 37<br>3.6 lseek函数 38<br>3.7 read函数 40<br>3.8 write函数 41<br>3.9 I/O的效率 41<br>3.10 文件共享 42<br>3.11 原子操作 45<br>3.11.1 添加至一个文件 45<br>3.11.2 创建一个文件 45<br>3.12 dup和dup2函数 46<br>3.13 fcntl函数 47<br>3.14 ioctl函数 50<br>3.15 /dev/fd 51<br>3.16 小结 52<br>习题 52<br>第4章 文件和目录 54<br>4.1 引言 54<br>4.2 stat, fstat和lstat函数 54<br>4.3 文件类型 55<br>4.4 设置-用户-ID和设置-组-ID 57<br>4.5 文件存取许可权 58<br>4.6 新文件和目录的所有权 60<br>4.7 access函数 60<br>4.8 umask函数 62<br>4.9 chmod和fchmod函数 63<br>4.10 粘住位 65<br>4.11 chown, fchown和 lchown函数 66<br>4.12 文件长度 67<br>4.13 文件截短 68<br>4.14 文件系统 69<br>4.15 link, unlink, remove和rename <br> 函数 71<br>4.16 符号连接 73<br>4.17 symlink 和readlink函数 76<br>4.18 文件的时间 76<br>4.19 utime函数 78<br>4.20 mkdir和rmdir函数 79<br>4.21 读目录 80<br>4.22 chdir, fchdir和getcwd函数 84<br>4.23 特殊设备文件 86<br>4.24 sync和fsync函数 87<br>4.25 文件存取许可权位小结 88<br>4.26 小结 89<br>习题 89<br>第5章 标准I/O库 91<br>5.1 引言 91<br>5.2 流和FILE对象 91<br>5.3 标准输入、标准输出和标准出错 91<br>5.4 缓存 91<br>5.5 打开流 94<br>5.6 读和写流 96<br>5.6.1 输入函数 96<br>5.6.2 输出函数 97<br>5.7 每次一行I/O 98<br>5.8 标准I/O的效率 99<br>5.9 二进制I/O 100<br>5.10 定位流 102<br>5.11 格式化I/O 103<br>5.11.1 格式化输出 103<br>5.11.2 格式化输入 103<br>5.12 实现细节 104<br>5.13 临时文件 105<br>5.14 标准I/O的替代软件 108<br>5.15 小结 108<br>习题 108<br>第6章 系统数据文件和信息 110<br>6.1 引言 110<br>6.2 口令文件 110<br>6.3 阴影口令 112<br>6.4 组文件 113<br>6.5 添加组ID 114<br>6.6 其他数据文件 115<br>6.7 登录会计 116<br>6.8 系统标识 116<br>6.9 时间和日期例程 117<br>6.10 小结 121<br>习题 121<br>第7章 UNIX进程的环境 122<br>7.1 引言 122<br>7.2 main 函数 122<br>7.3 进程终止 122<br>7.3.1 exit和_exit函数 122<br>7.3.2 atexit函数 124<br>7.4 命令行参数 125<br>7.5 环境表 126<br>7.6 C程序的存储空间布局 126<br>7.7 共享库 127<br>7.8 存储器分配 128<br>7.9 环境变量 130<br>7.10 setjmp 和longjmp函数 132<br>7.10.1 自动、寄存器和易失变量 134<br>7.10.2 自动变量的潜在问题 136<br>7.11 getrlimit 和setrlimit函数 136<br>7.12 小结 139<br>习题 140<br>第8章 进程控制 141<br>8.1 引言 141<br>8.2 进程标识 141<br>8.3 fork函数 142<br>8.4 vfork 函数 145<br>8.5 exit函数 147<br>8.6 wait和waitpid函数 148<br>8.7 wait3和wait4函数 152<br>8.8 竞态条件 153<br>8.9 exec函数 156<br>8.10 更改用户ID和组ID 160<br>8.10.1 setreuid 和setregid函数 162<br>8.10.2 seteuid和 setegid函数 163<br>8.10.3 组ID 163<br>8.11 解释器文件 164<br>8.12 system函数 167<br>8.13 进程会计 171<br>8.14 用户标识 175<br>8.15 进程时间 176<br>8.16 小结 178<br>习题 178<br>第9章 进程关系 180<br>9.1 引言 180<br>9.2 终端登录 180<br>9.2.1 4.3+BSD终端登录 180<br>9.2.2 SVR4终端登录 182<br>9.3 网络登录 182<br>9.3.1 4.3+BSD网络登录 182<br>9.3.2 SVR4网络登录 183<br>9.4 进程组 183<br>9.5 对话期 184<br>9.6 控制终端 185<br>9.7 tcgetpgrp 和tcsetpgrp函数 187<br>9.8 作业控制 187<br>9.9 shell执行程序 189<br>9.10 孤儿进程组 193<br>9.11 4.3+BSD实现 195<br>9.12 小结 197<br>习题 197<br>第10章 信号 198<br>10.1 引言 198<br>10.2 信号的概念 198<br>10.3 signal函数 203<br>10.3.1 程序起动 205<br>10.3.2 进程创建 206<br>10.4 不可靠的信号 206<br>10.5 中断的系统调用 207<br>10.6 可再入函数 209<br>10.7 SIGCLD语义 211<br>10.8 可靠信号术语和语义 213<br>10.9 kill和raise函数 213<br>10.10 alarm和pause函数 214<br>10.11 信号集 219<br>10.12 sigprocmask 函数 220<br>10.13 sigpending函数 222<br>10.14 sigaction函数 223<br>10.15 sigsetjmp 和siglongjmp函数 226<br>10.16 sigsuspend函数 229<br>10.17 abort函数 234<br>10.18 system函数 235<br>10.19 sleep函数 240<br>10.20 作业控制信号 241<br>10.21 其他特征 243<br>10.21.1 信号名字 243<br>10.21.2 SVR4信号处理程序的附<br> 加参数 244<br>10.21.3 4.3+BSD信号处理程序的附<br>加参数 244<br>10.22 小结 244<br>习题 244<br>第11章 终端I/O 246<br>11.1 引言 246<br>11.2 综述 246<br>11.3 特殊输入字符 250<br>11.4 获得和设置终端属性 254<br>11.5 终端选择标志 254<br>11.6 stty命令 258<br>11.7 波特率函数 259<br>11.8 行控制函数 260<br>11.9 终端标识 260<br>11.10 规范方式 263<br>11.11 非规范方式 266<br>11.12 终端的窗口大小 270<br>11.13 termcap, terminfo和 curses 271<br>11.14 小结 272<br>习题 272<br>第12章 高级I/O 273<br>12.1 引言 273<br>12.2 非阻塞I/O 273<br>12.3 记录锁 275<br>12.3.1 历史 276<br>12.3.2 fcntl记录锁 276<br>12.3.3 锁的隐含继承和释放 280<br>12.3.4 4.3+BSD的实现 281<br>12.3.5 建议性锁和强制性锁 284<br>12.4 流 288<br>12.4.1 流消息 289<br>12.4.2 putmsg和putpmsg函数 290<br>12.4.3 流ioctl操作 291<br>12.4.4 write至流设备 294<br>12.4.5 写方式 294<br>12.4.6 getmsg和getpmsg函数 294<br>12.4.7 读方式 295<br>12.5 I/O多路转接 296<br>12.5.1 select函数 298<br>12.5.2 poll函数 301<br>12.6 异步I/O 303<br>12.6.1 SVR4 303<br>12.6.2 4.3+BSD 303<br>12.7 readv和writev函数 304<br>12.8 readn和writen函数 306<br>12.9 存储映射I/O 307<br>12.10 小结 311<br>习题 311<br>第13章 精灵进程 312<br>13.1 引言 312<br>13.2 精灵进程的特征 312<br>13.3 编程规则 313<br>13.4 出错记录 314<br>13.4.1 SVR4流log驱动程序 315<br>13.4.2 4.3+BSD syslog设施 316<br>13.5 客户机-服务器模型 319<br>13.6 小结 319<br>习题 319<br>第14章 进程间通信 320<br>14.1 引言 320<br>14.2 管道 320<br>14.3 popen和pclose函数 325<br>14.4 协同进程 330<br>14.5 FIFO 333<br>14.6 系统V IPC 335<br>14.6.1 标识符和关键字 336<br>14.6.2 许可权结构 337<br>14.6.3 结构限制 337<br>14.6.4 优点和缺点 337<br>14.7 消息队列 338<br>14.8 信号量 342<br>14.9 共享存储 346<br>14.10 客户机-服务器属性 351<br>14.11 小结 353<br>习题 353<br>第15章 高级进程间通信 355<br>15.1 引言 355<br>15.2 流管道 355<br>15.3 传送文件描述符 358<br>15.3.1 SVR4 360<br>15.3.2 4.3BSD 361<br>15.3.3 4.3+BSD 364<br>15.4 open服务器第1版 366<br>15.5 客户机-服务器连接函数 371<br>15.5.1 SVR4 372<br>15.5.2 4.3+BSD 375<br>15.6 open服务器第2版 378<br>15.7 小结 385<br>习题 385<br>第16章 数据库函数库 386<br>16.1 引言 386<br>16.2 历史 386<br>16.3 函数库 386<br>16.4 实现概述 388<br>16.5 集中式或非集中式 390<br>16.6 并发 391<br>16.6.1 粗锁 391<br>16.6.2 细锁 391<br>16.7 源码 392<br>16.8 性能 409<br>16.8.1 单进程的结果 410<br>16.8.2 多进程的结果 410<br>16.9 小结 412<br>习题 412<br>第17章 与PostScript打印机通信 413<br>17.1 引言 413<br>17.2 PostScript通信机制 413<br>17.3 假脱机打印 415<br>17.4 源码 417<br>17.5 小结 434<br>习题 434<br>第18章 调制解调器拨号器 435<br>18.1 引言 435<br>18.2 历史 435<br>18.3 程序设计 436<br>18.4 数据文件 437<br>18.5 服务器设计 439<br>18.6 服务器源码 439<br>18.7 客户机设计 463<br>18.7.1 终端行规程 463<br>18.7.2 一个进程还是两个进程 464<br>18.8 客户机源码 465<br>18.9 小结 474<br>习题 474<br>第19章 伪终端 476<br>19.1 引言 476<br>19.2 概述 476<br>19.2.1 网络登录服务器 477<br>19.2.2 script程序 478<br>19.2.3 expect程序 479<br>19.2.4 运行协同进程 479<br>19.2.5 观看长时间运行程序的输出 479<br>19.3 打开伪终端设备 480<br>19.3.1 SVR4 481<br>19.3.2 4.3+BSD 482<br>19.4 pty_fork函数 484<br>19.5 pty程序 486<br>19.6 使用pty程序 489<br>19.6.1 utmp文件 489<br>19.6.2 作业控制交互 489<br>19.6.3 检查长时间运行程序的输出 491<br>19.6.4 script程序 491<br>19.6.5 运行协同进程 492<br>19.6.6 用非交互模式驱动交互式<br> 程序 492<br>19.7 其他特性 494<br>19.7.1 打包模式 494<br>19.7.2 远程模式 494<br>19.7.3 窗口大小变化 495<br>19.7.4 信号发生 495<br>19.8 小结 495<br>习题 495<br>附录A 函数原型 497<br>附录B 其他源代码 512<br>附录C 习题答案 518<br>参考书目 536<br>
- 粉丝: 39
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助