《unix系统v第4版-程序员指南:streams》求取 ⇩

第一章 引论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 CHARPROC37

4.2.1.1 驱动程序处理37

4.2.1 读侧处理37

4.2.2 写侧处理38

4.2.1.3 CANONPROC38

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 模块和驱动程序的ioctl99

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 ioctl115

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:其他用户打开一个MUXdriver185

10.6 设计准则186

第十一章 基于STREAMS的管道和FIFO187

11.1 创建并打开管道和FIFO187

11.2 访问管道和FIFO188

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 关闭管道或FIFO190

11.3 刷清管道和FIFO190

11.4 命名的流191

11.4.1 fattach191

11.4.2 fdetach192

11.4.3 isastream192

11.4.4 传递文件描述字193

11.5 唯一的连接193

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

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

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

第十二章 基于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仿真模块-PTEM206

图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和pts210

12.2.4 分组方式210

12.2.5.3 ptsname213

12.2.5.2 unlockpt213

12.2.5.1 grantpt213

A.l streamtab215

A.2 QUEUE结构215

A.2.1 queue215

附录A STREAMS数据结构215

A.2.2 qinit216

A.2.3 module_info216

A.2.4 module_stat217

A.2.5 equeue217

A.2.6 qband217

A.3 消息结构218

A.4 iocblk220

A.5 copyreq220

A.6 copyresp221

A.8 linkblk222

A.7 strioctl222

A.9 stroptions223

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 返回模块id245

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/O353

图G—7:386上的UNIX I/O354

词汇表355

《unix系统v第4版-程序员指南:streams》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由 北京:电子工业出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。