《unix系统v第4版-程序员指南:streams》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2222
  • ISBN:
  • 页数:360 页
图书介绍:

第一章 引论 1

1.1 本指南介绍 1

1.1.1 读者 1

1.1.2 组织 1

目录 1

1.1.3 所用的约定 2

1.1.4 其它文档 3

第二章 STREAMS概述 5

2.1 什么是STREAMS? 5

图和表 6

图2—2:基于STREAMS的管道 6

图2—1:简单流 6

2.2 基本的流操作 7

图2—3:到通信驱动程序的流 8

2.3 STREAMS的组成部分 9

2.3.1 队列 9

2.3.2.1 消息类型 10

图2—4:消息 10

2.3.2 消息 10

图2—5:消息队列中的消息 11

2.3.2.2 消息入队优先级 11

2.3.3 模块 12

图2—6:有关流的细节 12

2.4 多路复用 13

2.3.4 驱动程序 13

图2—7:多对一多路转接器 14

图2—8:一对多多路转接器 14

图2—9:多对多多路转接器 15

图2—10:Internet多路转接流 15

图2—11:X.25多路转接流 16

2.5.2 操作模块 17

2.5.1 标准化的服务界面 17

2.5 STREAMS的长处 17

图2—12:协议模块可移植性 18

2.5.2.3 协议迁移 18

2.5.2.2 协议替换 18

2.5.2.1 协议可移植性 18

2.5.2.4 模块可复用性 19

图2—13:协议迁移 19

图2—14:模块可复用性 20

第三章 STREAMS机制 21

3.1 STREAMS机制概述 21

3.1.1 STREAMS系统调用 21

3.2 流的构造 21

图3—1:逆流和顺流流的构造 22

3.2.1 打开一个STREAMS设备文件 23

图3—2:流中队列关系 23

图3—3:打开的基于STREAMS的驱动程序 24

3.2.2 创建基于STREAMS的管道 25

图3—4:创建基于STREAMS的管道 26

3.2.3 添加与删除模块 26

3.2.5 流构造示例 27

3.2.4 关闭流 27

3.2.5.1 插入模块 28

图3—5:大小写转换程序模块 29

3.2.5.2 模块和驱动程序控制 29

第四章 STREAMS处理例程 33

4.1.1 put过程 33

4.1 put和service过程 33

4.2 异步协议流示例 34

4.1.2 service过程 34

图4—1:空转流配置示例 35

图4—2:可操作流示例 36

图4—3:模块put和service过程 37

4.2.1.2 CHARPROC 37

4.2.1.1 驱动程序处理 37

4.2.1 读侧处理 37

4.2.2 写侧处理 38

4.2.1.3 CANONPROC 38

4.2.3 分析 39

5.1.1 消息类型 41

5.1 消息 41

第五章 消息 41

5.1.2 需加速处理的数据 42

5.2 消息结构 42

5.2.1 消息链接 45

图5—1:消息的构成和链接 45

5.2.2 发送/接收消息 46

5.2.3 流首处理的控制 49

5.2.3.2 写偏移量 50

5.2.3.1 读任选项 50

5.3 消息队列和消息优先级 51

图5—3:具有一个优先波段的消息顺序 51

图5—2:队列中的消息排序 51

5.3.1 queue结构 54

5.3.1.1 使用queue信息 55

5.3.1.2 队列标志 55

5.3.1.3 equeue结构 56

5.3.1.4 qband结构 56

5.3.1.5 使用queue和qband信息 57

5.3.2 消息处理 58

图5—4:非EFT系统中的数据结构链接 58

5.3.2.1 流量控制 60

图5—5:流量控制 60

5.4 服务界面 63

5.4.1 服务界面的长处 64

图5—6:协议替换 64

图5—7:服务界面 65

5.4.2 服务界面库示例 66

5.4.2.1 访问服务供者 68

5.4.2.3 把数据发送给服务供者 70

5.4.2.2 关闭服务供者 70

5.4.2.4 接收数据 71

5.4.2.5 模块服务界面示例 73

5.5 消息的分配和释放 77

5.5.1 从无缓冲区中恢复 80

5.6 扩充的STREAMS缓冲区 82

6.1.1 同步输入/输出 85

第六章 轮询和信号 85

6.1 输入/输出轮询 85

6.1.2 异步输入/输出 88

6.1.3 信号 89

6.1.3.1 扩展的信号 89

6.2 流作为一个控制终端 90

6.2.1 作业控制 90

6.2.2 分配和释放 92

6.2.4 挂起信号 92

6.2.5 访问控制终端 92

6.2.3 挂断的流 92

第七章 模块和驱动程序概述 95

7.1 模块和驱动程序环境 95

7.1.1 模块和驱动程序声明 95

7.1.1.1 空模块示例 98

7.2 模块和驱动程序的ioctl 99

7.2.1 一般ioctl的处理 100

7.2.2 I_STRioctl的处理 102

7.2.3 透明的ioctl处理 103

7.2.4 透明的ioctl消息 105

7.2.5 透明的ioctl示例 106

7.2.5.1 M_COPYIN示例 107

7.2.5.2 M_COPYOUT示例 109

7.2.5.3 双向传送示例 111

7.2.6 I_LIST ioctl 115

7.3 刷清处理 116

图7—1:刷清流的写侧 118

图7—2:刷清流的读侧 119

7.4 驱动程序—核心界面 120

图7—3:影响驱动程序的界面 121

7.4.1 设备驱动程序界面和驱动程序—核心界面 122

7.4.2 STREAMS界面 122

7.5 设计准则 123

7.5.1 模块和驱动程序 123

7.5.1.1 open/close例程的规则 124

7.5.1.3 put和service过程的规则 125

7.5.1.2 ioctl的规则 125

7.5.3 前导文件 127

7.5.2.1 STREAMS数据结构的动态分配 127

7.5.2 数据结构 127

7.5.4 可访问的符号和函数 128

第八章 模块 131

8.1 模块 131

8.1.1 模块例程 131

8.1.2 过滤器模块示例 134

8.2 流量控制 137

8.3 设计准则 139

第九章 驱动程序 141

9.1 驱动程序 141

9.1.1 驱动程序概述 141

9.1.1.1 驱动程序类别 141

9.1.1.2 驱动程序配置 142

9.1.1.3 编写驱动程序 142

9.1.1.4 主设备号和次设备号 143

9.1.2 STREAMS驱动程序 144

图9—1:设备驱动程序流 145

9.1.2.1 打印机驱动程序示例 146

9.1.2.2 驱动程序流量控制 152

9.2 增殖 153

9.3 循环驱动程序 154

图9—2:循环流 154

9.4 设计准则 161

第十章 多路复用 163

10.1 多路复用 163

10.1.1 建造多路转接器 164

图10—1:协议多路转接器 164

图10—2:连接前 165

图10—3:第一次连接后的IP多路转接器 166

图10—4:IP多路转接器 167

图10—5:TP多路转接器 168

10.1.2 拆除多路转接器 169

10.2 连接/拆接下层流 170

10.1.3 通过多路转接器分路数据 170

10.2.1 连接下层流 171

10.3 多路转接器构造实例 172

10.2.2 拆接下层流 172

图10—6:连接前的Internet多路转接器 173

10.4 多路复用驱动程序 174

图10—7:连接后的Internet多路转接器 174

10.4.1 上层写put过程 177

10.4.2 上层写service过程 180

10.4.3 下层写service过程 180

10.4.4 下层读put过程 181

10.5 持续的链接 183

图10—8:MUXdriver和Driverl和open() 183

图10—9:在I_PLINK以后的多路转接器 184

图10—10:其他用户打开一个MUXdriver 185

10.6 设计准则 186

第十一章 基于STREAMS的管道和FIFO 187

11.1 创建并打开管道和FIFO 187

11.2 访问管道和FIFO 188

11.2.1 从管道或FIFO读 188

图11-1:把模块压入基于STREAMS的管道 188

11.2.2 向管道或FIFO写 189

11.2.2.1 长度为0的写 189

11.2.2.2 不可分写(atomic write) 189

11.2.3 关闭管道或FIFO 190

11.3 刷清管道和FIFO 190

11.4 命名的流 191

11.4.1 fattach 191

11.4.2 fdetach 192

11.4.3 isastream 192

11.4.4 传递文件描述字 193

11.5 唯一的连接 193

11.4.5 在远程环境中命名的流 193

图11—2:服务方建立一个管道 194

图11-3:进程X和Y打开/usr/toserv 194

第十二章 基于STREAMS的终端子系统 197

12.1 基于STREAMS的终端子系统 197

图12—1:基于STREMS的终端子系统 197

12.1.1.1 默认设置 198

12.1.1 线路规程模块 198

12.1.1.2 数据结构 199

12.1.1.3 open/close例程 199

12.1.1.4 读侧处理 200

12.1.1.5 写侧处理 201

12.1.1.6 在ldterm中的EUC处理 201

12.1.2 termiox(7)中的支持 204

12.1.3 硬件仿真模块 204

12.2 基于STREAMS的伪终端子系统 205

12.2.1 线路规程模块 206

12.2.2 伪tty仿真模块-PTEM 206

图12—2:伪tty子系统体系结构 207

12.2.2.1 数据结构 208

12.2.3 远程方式 209

12.2.2.2 open/elose例程 209

12.2.5 伪tty驱动程序-ptm和pts 210

12.2.4 分组方式 210

12.2.5.3 ptsname 213

12.2.5.2 unlockpt 213

12.2.5.1 grantpt 213

A.l streamtab 215

A.2 QUEUE结构 215

A.2.1 queue 215

附录A STREAMS数据结构 215

A.2.2 qinit 216

A.2.3 module_info 216

A.2.4 module_stat 217

A.2.5 equeue 217

A.2.6 qband 217

A.3 消息结构 218

A.4 iocblk 220

A.5 copyreq 220

A.6 copyresp 221

A.8 linkblk 222

A.7 strioctl 222

A.9 stroptions 223

B.1 消息类型 225

附录B 消息类型 225

B.2 普通消息 225

图B—1:M_PROTO和M_PCPRCTO消息结构 229

B.3 高优先级消息 233

附录C STREAMS公用程序 239

C.1 STREAMS公用程序 239

C.2 公用程序说明 239

adjmsg 调整消息中的字节 239

allocb 分配消息和数据块 240

backq 得到在给定队列之后的队列的指针 240

bcanput 在给定的优先波段内测试流量控制 240

buffcall 从allocb失败中恢复 241

canput 测试队列中的空间 241

copymsg 拷贝消息 242

datamsg 测试消息是否为数据消息 242

copyb 拷贝消息块 242

dupb 复制消息块描述字 242

enableok 重新允许队列被调度进行服务 243

esballoc 分配消息和数据块 243

dupmsg 复制消息 243

flushband 刷清在给定优先波段内的消息 243

flushq 刷清队列 244

freeb 释放单个消息块 244

freemsg 释放消息中所有消息块 244

getadmin() 返回指向模块的指针 245

getmid 返回模块id 245

getq 从队列上得到一个消息 245

insq 把一个消息放到队列上指定的地方 245

noenable 禁止队列被调度 246

msgdsize 得到消息中数据字节的数目 246

linkb 把两个消息串接成一个 246

putctl 放置一控制消息 247

putbq 把一个消息放到一个队列的开头 247

pullupmsg 串接和调整消息中的字节 247

OTHERQ 得到配偶队列的指针 247

putctll 放置一带有单字节参数的控制消息 248

putnext 把一个消息放到下一个队列上 248

putq 把一个消息放到队列上 248

qreply 以相反方向在流上发送消息 249

qsize 查出队列上消息的数目 249

qenable 启用一队列 249

RD 得到读队列的指针 250

rmvb 从消息中删除一消息块 250

rmvq 从队列上删除一消息 250

splstr 设置处理器级别 250

strlog 提交日志消息 250

strqget 获得有关队列或该队列波段的信息 251

strqset 改变有关一个队列或该队列波段的信息 252

testb 检查一个可用缓冲区 252

unbufcall 取消一个bufcall请求 252

unlinkb 从消息头删除一个消息块 252

WR 得到写队列的指针 253

C.2.1 DKI界面 253

C.3 公用程序例程汇总表 253

附录D 调试 255

D.1 crash(1M)命令 256

D.2 dump模块示例 259

D.3 出错和轨迹登记 267

图D—1:出错和轨迹登记 268

附录E 配置 269

E.1 配置STREAMS模块和驱动程序 269

E.1.1 配置示例 270

E.1.2 可调参数 272

E.2.1 用户界面 273

E.2 自动压入设施 273

附录F 手册页 277

附录G 硬件示例 329

G.1 硬件示例 329

G.1.1 3B2计算机配置机制 329

G.2 3B2基于STREAMS的端口驱动程序 329

G.2.1 数据结构 330

G.2.2 open和close例程 331

G.2.3 写put过程 332

G.2.4 写service过程 333

G.2.5 中断过程 333

G.2.6 读service过程 334

G.3 3B2基于STREAMS的控制台驱动程序 335

G.3.1 数据结构 336

G.3.2 open和close例程 336

G.3.3 读侧处理 336

G.3.3.1 中断级处理 336

G.3.3.2 服务过程处理 337

G.3.4 写侧处理 337

G.3.5 匿名方式 338

G.4 3B2基于STREAMS的XT驱动程序 338

图G—1:基于STREAMS的XT驱动程序(连接前) 339

图G—2:基于STREAMS的XT驱动程序(连接后) 340

图G—3:基于STREAMS的XT驱动程序 341

图G—4:starlan上基于STREAMS的XT驱动程序 342

G.4.1 数据结构 343

G.4.2 open处理 345

G.4.3 close处理 346

G.4.4 数据流程 346

图G—5:基于STREAMS的XT驱动程序数据流 347

G.4.5 读侧处理 347

G.4.6 写侧处理 348

G.4.8.1 STREAMS流量控制 350

G.4.8 流量控制 350

G.4.7 多路实用 350

G.4.11 编码 351

G.4.10 循环冗余检验 351

G.4.9 扫描 351

G.4.8.2 XT驱动程序协议流量控制 351

G.5 扩展的STREAMS缓冲区 352

图G—6:3B2上的UNIX I/O 353

图G—7:386上的UNIX I/O 354

词汇表 355