构建 STREAMS

本部分描述了构建 STREAMS 的过程。

在第一个 open 子例程上创建到与 STREAMS 驱动程序对应的字符特殊文件的流。

流通常分两步构建。 步骤 1 创建仅由流头 (请参阅 流头) 和设备驱动程序组成的最小流,步骤 2 添加模块以生成扩展流 (请参阅 扩展流) ,如流设置图 (图 1) 中所示。 可以添加到流的模块称为可推送模块 (请参阅 可推送模块)。

图 1。 流设置
此图显示左侧的最小流设置。 流头从位于原始 tty 设备驱动程序之上的队列对发送和接收通信。 右侧的扩展流在队列对和流头之间具有 CANONPROC 模块。 CANONPROC 与流头和队列对之间存在双向通信。

构建流的第一步有三个部分:

  1. 分配和初始化头和驱动程序结构。
  2. 将头和尾中的模块相互链接,形成一个流。
  3. 调用驱动程序打开例程。

如果驱动程序执行所需的所有字符和设备处理,那么无需将任何模块添加到流中。 STREAMS 驱动程序的示例包括原始 tty 驱动程序 (一个传递输入字符而不进行更改的驱动程序) 和一个具有多个向其打开的流 (对应于向字符设备驱动程序打开的多个次要设备) 的驱动程序。

当驱动程序从设备接收字符时,它会将它们放入消息中。 然后将消息传输到下一个流组件 (流头) ,该流组件将抽取消息内容并将其复制到用户空间。 对下游字符输出进行类似处理; 流头将数据从用户空间复制到消息并将其发送到驱动程序。