如何实现类似UNIX的Alarm和IPC

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

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧