消息类型
将为所有 STREAMS 消息分配消息类型,以指示模块和驱动程序对其的预期使用,并确定流头对其的处理。
驱动程序或模块可以将大多数类型分配给它生成的消息,并且模块可以在处理期间修改消息类型。 流头会将某些系统调用转换为指定的消息类型并将其发送到下游。 它还将通过复制上游发送的特定消息类型的内容来响应其他调用。 消息仅存在于内核中,因此用户进程只能发送和接收缓冲区。 进程未显式识别消息类型,但它可能识别消息边界,具体取决于所使用的系统调用 (请参阅 发送和接收消息 中的 getmsg 系统调用与 read 子例程之间的区别)。
大多数消息类型是 STREAMS 内部的,只能从一个 STREAMS 模块传递到另一个 STREAMS 模块。 还可以在流和用户进程之间传递一些消息类型,包括 M_DATA , M_PROTO 和 M_PCPROTO。 M_DATA 消息在流中以及在流与用户进程之间传送数据。 M_PROTO 和 M_PCPROTO 消息同时包含数据和控制信息。 但是,控制信息和数据之间的区别通常由开发者在实现特定流时确定。 控制信息包括两种类型的信息: 服务接口信息和条件或状态信息。 在呈现服务接口的两个流实体之间传递服务接口信息。 可以在任何两个流实体之间发送条件或状态信息,而不考虑它们的接口。 M_PCPROTO 消息与 M_PROTO 消息具有相同的一般用途,但前者在流中的移动速度更快。