STREAMS流机制

基本概念

STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口,I/O多路转接中poll(轮询)函数的使用,以及基于STREAMS的管道和命名管道的实现。

流在用户进程和设备驱动程序之间提供了一条全双工通路。流无需和实际硬件设备直接会话,流也可以用来构造伪设备驱动程序。在流首(stream head)之下可以压入处理模块,这可以用ioctl命令实现。

STREAMS模块是作为内核的一部分执行的,这类似于设备驱动程序。当构造内核时,STREAMS模块联编进入内核。

 

STREAMS消息

STREAMS的所有输入和输出都基于消息。流首和用户进程使用read、write、ioctl、getmsg、getpmsg、putmsg和putpmsg交换消息。在流首、各处理模块和设备驱动程序之间,消息可以顺流而下,也可以逆流而上。

在用户进程和流首之间,消息由下列几部分组成:消息内型、可选择的控制信息以及可选择的数据。控制信息和数据由strbuf结构指定:

struct strbuf
{
    int maxlen;    /* size of buffer */
    int len;          /* number of bytes currently in buffer */
    char *buf;       /* pointer to buffer */
}

当用putmsg或putpmsg发送消息时, len指定缓冲区中数据的字节数。当用getmsg或getpmsg接受消息时,maxlen指定缓冲区的长度(使内核不会溢出缓冲区),而len则由内核设置为存放在缓存区中的数据量。消息长度为0是允许的,len为-1说明没有控制信息和或数据。

posted on 2014-01-05 19:54  运动和行动  阅读(340)  评论(0编辑  收藏  举报