本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。\r\n 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。\r\n 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。\r\n\r\n
\r\n
目 录\r\n译者序\r\n译者简介\r\n前言\r\n第1章 UNIX基础知识 1\r\n1.1 引言 1\r\n1.2 登录 1\r\n1.2.1 登录名 1\r\n1.2.2 shell 1\r\n1.3 文件和目录 2\r\n1.3.1 文件系统 2\r\n1.3.2 文件名 2\r\n1.3.3 路径名 2\r\n1.3.4 工作目录 4\r\n1.3.5 起始目录 4\r\n1.4 输入和输出 5\r\n1.4.1 文件描述符 5\r\n1.4.2 标准输入. 标准输出和标准\r\n 出错 5\r\n1.4.3 不用缓存的I/O 5\r\n1.4.4 标准I/O 6\r\n1.5 程序和进程 7\r\n1.5.1 程序 7\r\n1.5.2 进程和进程ID 7\r\n1.5.3 进程控制 7\r\n1.6 ANSI C 9\r\n1.6.1 函数原型 9\r\n1.6.2 类属指针 9\r\n1.6.3 原始系统数据类型 10\r\n1.7 出错处理 10\r\n1.8 用户标识 11\r\n1.8.1 用户ID 11\r\n1.8.2 组ID 12\r\n1.8.3 添加组ID 12\r\n1.9 信号 12\r\n1.10 UNIX时间值 14\r\n1.11 系统调用和库函数 14\r\n1.12 小结 16\r\n习题 16\r\n第2章 UNIX标准化及实现 17\r\n2.1 引言 17\r\n2.2 UNIX标准化 17\r\n2.2.1 ANSI C 17\r\n2.2.2 IEEE POSIX 18\r\n2.2.3 X/Open XPG3 19\r\n2.2.4 FIPS 19\r\n2.3 UNIX实现 19\r\n2.3.1 SVR4 20\r\n2.3.2 4.3+BSD 20\r\n2.4 标准和实现的关系 21\r\n2.5 限制 21\r\n2.5.1 ANSI C限制 22\r\n2.5.2 POSIX限制 22\r\n2.5.3 XPG3限制 24\r\n2.5.4 sysconf. pathconf 和fpathconf\r\n函数 24\r\n2.5.5 FIPS 151-1要求 28\r\n2.5.6 限制总结 28\r\n2.5.7 未确定的运行时间限制 29\r\n2.6 功能测试宏 32\r\n2.7 基本系统数据类型 32\r\n2.8 标准之间的冲突 33\r\n2.9 小结 34\r\n习题 34\r\n第3章 文件I/O 35\r\n3.1 引言 35\r\n3.2 文件描述符 35\r\n3.3 open函数 35\r\n3.4 creat函数 37\r\n3.5 close函数 37\r\n3.6 lseek函数 38\r\n3.7 read函数 40\r\n3.8 write函数 41\r\n3.9 I/O的效率 41\r\n3.10 文件共享 42\r\n3.11 原子操作 45\r\n3.11.1 添加至一个文件 45\r\n3.11.2 创建一个文件 45\r\n3.12 dup和dup2函数 46\r\n3.13 fcntl函数 47\r\n3.14 ioctl函数 50\r\n3.15 /dev/fd 51\r\n3.16 小结 52\r\n习题 52\r\n第4章 文件和目录 54\r\n4.1 引言 54\r\n4.2 stat, fstat和lstat函数 54\r\n4.3 文件类型 55\r\n4.4 设置-用户-ID和设置-组-ID 57\r\n4.5 文件存取许可权 58\r\n4.6 新文件和目录的所有权 60\r\n4.7 access函数 60\r\n4.8 umask函数 62\r\n4.9 chmod和fchmod函数 63\r\n4.10 粘住位 65\r\n4.11 chown, fchown和 lchown函数 66\r\n4.12 文件长度 67\r\n4.13 文件截短 68\r\n4.14 文件系统 69\r\n4.15 link, unlink, remove和rename \r\n 函数 71\r\n4.16 符号连接 73\r\n4.17 symlink 和readlink函数 76\r\n4.18 文件的时间 76\r\n4.19 utime函数 78\r\n4.20 mkdir和rmdir函数 79\r\n4.21 读目录 80\r\n4.22 chdir, fchdir和getcwd函数 84\r\n4.23 特殊设备文件 86\r\n4.24 sync和fsync函数 87\r\n4.25 文件存取许可权位小结 88\r\n4.26 小结 89\r\n习题 89\r\n第5章 标准I/O库 91\r\n5.1 引言 91\r\n5.2 流和FILE对象 91\r\n5.3 标准输入. 标准输出和标准出错 91\r\n5.4 缓存 91\r\n5.5 打开流 94\r\n5.6 读和写流 96\r\n5.6.1 输入函数 96\r\n5.6.2 输出函数 97\r\n5.7 每次一行I/O 98\r\n5.8 标准I/O的效率 99\r\n5.9 二进制I/O 100\r\n5.10 定位流 102\r\n5.11 格式化I/O 103\r\n5.11.1 格式化输出 103\r\n5.11.2 格式化输入 103\r\n5.12 实现细节 104\r\n5.13 临时文件 105\r\n5.14 标准I/O的替代软件 108\r\n5.15 小结 108\r\n习题 108\r\n第6章 系统数据文件和信息 110\r\n6.1 引言 110\r\n6.2 口令文件 110\r\n6.3 阴影口令 112\r\n6.4 组文件 113\r\n6.5 添加组ID 114\r\n6.6 其他数据文件 115\r\n6.7 登录会计 116\r\n6.8 系统标识 116\r\n6.9 时间和日期例程 117\r\n6.10 小结 121\r\n习题 121\r\n第7章 UNIX进程的环境 122\r\n7.1 引言 122\r\n7.2 main 函数 122\r\n7.3 进程终止 122\r\n7.3.1 exit和_exit函数 122\r\n7.3.2 atexit函数 124\r\n7.4 命令行参数 125\r\n7.5 环境表 126\r\n7.6 C程序的存储空间布局 126\r\n7.7 共享库 127\r\n7.8 存储器分配 128\r\n7.9 环境变量 130\r\n7.10 setjmp 和longjmp函数 132\r\n7.10.1 自动. 寄存器和易失变量 134\r\n7.10.2 自动变量的潜在问题 136\r\n7.11 getrlimit 和setrlimit函数 136\r\n7.12 小结 139\r\n习题 140\r\n第8章 进程控制 141\r\n8.1 引言 141\r\n8.2 进程标识 141\r\n8.3 fork函数 142\r\n8.4 vfork 函数 145\r\n8.5 exit函数 147\r\n8.6 wait和waitpid函数 148\r\n8.7 wait3和wait4函数 152\r\n8.8 竞态条件 153\r\n8.9 exec函数 156\r\n8.10 更改用户ID和组ID 160\r\n8.10.1 setreuid 和setregid函数 162\r\n8.10.2 seteuid和 setegid函数 163\r\n8.10.3 组ID 163\r\n8.11 解释器文件 164\r\n8.12 system函数 167\r\n8.13 进程会计 171\r\n8.14 用户标识 175\r\n8.15 进程时间 176\r\n8.16 小结 178\r\n习题 178\r\n第9章 进程关系 180\r\n9.1 引言 180\r\n9.2 终端登录 180\r\n9.2.1 4.3+BSD终端登录 180\r\n9.2.2 SVR4终端登录 182\r\n9.3 网络登录 182\r\n9.3.1 4.3+BSD网络登录 182\r\n9.3.2 SVR4网络登录 183\r\n9.4 进程组 183\r\n9.5 对话期 184\r\n9.6 控制终端 185\r\n9.7 tcgetpgrp 和tcsetpgrp函数 187\r\n9.8 作业控制 187\r\n9.9 shell执行程序 189\r\n9.10 孤儿进程组 193\r\n9.11 4.3+BSD实现 195\r\n9.12 小结 197\r\n习题 197\r\n第10章 信号 198\r\n10.1 引言 198\r\n10.2 信号的概念 198\r\n10.3 signal函数 203\r\n10.3.1 程序起动 205\r\n10.3.2 进程创建 206\r\n10.4 不可靠的信号 206\r\n10.5 中断的系统调用 207\r\n10.6 可再入函数 209\r\n10.7 SIGCLD语义 211\r\n10.8 可靠信号术语和语义 213\r\n10.9 kill和raise函数 213\r\n10.10 alarm和pause函数 214\r\n10.11 信号集 219\r\n10.12 sigprocmask 函数 220\r\n10.13 sigpending函数 222\r\n10.14 sigaction函数 223\r\n10.15 sigsetjmp 和siglongjmp函数 226\r\n10.16 sigsuspend函数 229\r\n10.17 abort函数 234\r\n10.18 system函数 235\r\n10.19 sleep函数 240\r\n10.20 作业控制信号 241\r\n10.21 其他特征 243\r\n10.21.1 信号名字 243\r\n10.21.2 SVR4信号处理程序的附\r\n 加参数 244\r\n10.21.3 4.3+BSD信号处理程序的附\r\n加参数 244\r\n10.22 小结 244\r\n习题 244\r\n第11章 终端I/O 246\r\n11.1 引言 246\r\n11.2 综述 246\r\n11.3 特殊输入字符 250\r\n11.4 获得和设置终端属性 254\r\n11.5 终端选择标志 254\r\n11.6 stty命令 258\r\n11.7 波特率函数 259\r\n11.8 行控制函数 260\r\n11.9 终端标识 260\r\n11.10 规范方式 263\r\n11.11 非规范方式 266\r\n11.12 终端的窗口大小 270\r\n11.13 termcap, terminfo和 curses 271\r\n11.14 小结 272\r\n习题 272\r\n第12章 高级I/O 273\r\n12.1 引言 273\r\n12.2 非阻塞I/O 273\r\n12.3 记录锁 275\r\n12.3.1 历史 276\r\n12.3.2 fcntl记录锁 276\r\n12.3.3 锁的隐含继承和释放 280\r\n12.3.4 4.3+BSD的实现 281\r\n12.3.5 建议性锁和强制性锁 284\r\n12.4 流 288\r\n12.4.1 流消息 289\r\n12.4.2 putmsg和putpmsg函数 290\r\n12.4.3 流ioctl操作 291\r\n12.4.4 write至流设备 294\r\n12.4.5 写方式 294\r\n12.4.6 getmsg和getpmsg函数 294\r\n12.4.7 读方式 295\r\n12.5 I/O多路转接 296\r\n12.5.1 select函数 298\r\n12.5.2 poll函数 301\r\n12.6 异步I/O 303\r\n12.6.1 SVR4 303\r\n12.6.2 4.3+BSD 303\r\n12.7 readv和writev函数 304\r\n12.8 readn和writen函数 306\r\n12.9 存储映射I/O 307\r\n12.10 小结 311\r\n习题 311\r\n第13章 精灵进程 312\r\n13.1 引言 312\r\n13.2 精灵进程的特征 312\r\n13.3 编程规则 313\r\n13.4 出错记录 314\r\n13.4.1 SVR4流log驱动程序 315\r\n13.4.2 4.3+BSD syslog设施 316\r\n13.5 客户机-服务器模型 319\r\n13.6 小结 319\r\n习题 319\r\n第14章 进程间通信 320\r\n14.1 引言 320\r\n14.2 管道 320\r\n14.3 popen和pclose函数 325\r\n14.4 协同进程 330\r\n14.5 FIFO 333\r\n14.6 系统V IPC 335\r\n14.6.1 标识符和关键字 336\r\n14.6.2 许可权结构 337\r\n14.6.3 结构限制 337\r\n14.6.4 优点和缺点 337\r\n14.7 消息队列 338\r\n14.8 信号量 342\r\n14.9 共享存储 346\r\n14.10 客户机-服务器属性 351\r\n14.11 小结 353\r\n习题 353\r\n第15章 高级进程间通信 355\r\n15.1 引言 355\r\n15.2 流管道 355\r\n15.3 传送文件描述符 358\r\n15.3.1 SVR4 360\r\n15.3.2 4.3BSD 361\r\n15.3.3 4.3+BSD 364\r\n15.4 open服务器第1版 366\r\n15.5 客户机-服务器连接函数 371\r\n15.5.1 SVR4 372\r\n15.5.2 4.3+BSD 375\r\n15.6 open服务器第2版 378\r\n15.7 小结 385\r\n习题 385\r\n第16章 数据库函数库 386\r\n16.1 引言 386\r\n16.2 历史 386\r\n16.3 函数库 386\r\n16.4 实现概述 388\r\n16.5 集中式或非集中式 390\r\n16.6 并发 391\r\n16.6.1 粗锁 391\r\n16.6.2 细锁 391\r\n16.7 源码 392\r\n16.8 性能 409\r\n16.8.1 单进程的结果 410\r\n16.8.2 多进程的结果 410\r\n16.9 小结 412\r\n习题 412\r\n第17章 与PostScript打印机通信 413\r\n17.1 引言 413\r\n17.2 PostScript通信机制 413\r\n17.3 假脱机打印 415\r\n17.4 源码 417\r\n17.5 小结 434\r\n习题 434\r\n第18章 调制解调器拨号器 435\r\n18.1 引言 435\r\n18.2 历史 435\r\n18.3 程序设计 436\r\n18.4 数据文件 437\r\n18.5 服务器设计 439\r\n18.6 服务器源码 439\r\n18.7 客户机设计 463\r\n18.7.1 终端行规程 463\r\n18.7.2 一个进程还是两个进程 464\r\n18.8 客户机源码 465\r\n18.9 小结 474\r\n习题 474\r\n第19章 伪终端 476\r\n19.1 引言 476\r\n19.2 概述 476\r\n19.2.1 网络登录服务器 477\r\n19.2.2 script程序 478\r\n19.2.3 expect程序 479\r\n19.2.4 运行协同进程 479\r\n19.2.5 观看长时间运行程序的输出 479\r\n19.3 打开伪终端设备 480\r\n19.3.1 SVR4 481\r\n19.3.2 4.3+BSD 482\r\n19.4 pty_fork函数 484\r\n19.5 pty程序 486\r\n19.6 使用pty程序 489\r\n19.6.1 utmp文件 489\r\n19.6.2 作业控制交互 489\r\n19.6.3 检查长时间运行程序的输出 491\r\n19.6.4 script程序 491\r\n19.6.5 运行协同进程 492\r\n19.6.6 用非交互模式驱动交互式\r\n 程序 492\r\n19.7 其他特性 494\r\n19.7.1 打包模式 494\r\n19.7.2 远程模式 494\r\n19.7.3 窗口大小变化 495\r\n19.7.4 信号发生 495\r\n19.8 小结 495\r\n习题 495\r\n附录A 函数原型 497\r\n附录B 其他源代码 512\r\n附录C 习题答案 518\r\n参考书目 536 \r\n
\r\n