首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

VxWorks管道(Pipe)创建与文件操作(1)

VxWorks管道(Pipe)创建与文件操作(1)

管道最明显的优势就是支持Select(),这样任务可以同时等待包括管道在内的一系列I/O设备上的数据。此外,PipeDrv提供的几个I/O控制命令也比较有用。
使用管道除了需要管道驱动PipeDrv(定义为宏INCLUDE_PIPES)支持外,还需要用到I/O系统库IoLib/IosLib(定义为宏INCLUDE_IO_SYSTEM)的支持,其他库支持视为应用需要,如SelectLib,使用这些库必须初始化自动在加入相应组件后自动调用。

创建管道设备
#Include “PipeDrv.H”
STATUS PipeDevCreate(Char *Name,Int NMessages,Int NBytes);
参数Name表示创建的管道设备名称。该设备名称必须在所有I/O设备名称中唯一。后面两个参数指定管道容量:NMessages表示管道中最大消息条数,NBytes表示每条消息最大字节长度。

管道文件操作
管道IPC采取I/O操作形式,需要打开管道文件进行。函数Open()打开一个管道文件:
#Include “IoLib.H”
Int Open(Const Char *Name,Int Flags,Int Mode);
参数Name需要和管道设备名称一致,Flags表示3种打开的读写方式之一:只读(O_RDONLY),只写(O_WRONLY),读写(O_RDWR)。对于管道文件,参数Mode指定为0。
成功时,返回一个非负整型数标识得到的管道的文件描述符,失败时返回ERROR。
参数Fd为Open()得到的文件描述符。
对于Read(),后面的参数表示接收管道数据的缓冲区Buffer及其大小Maxbytes,如果消息缓冲区数据大于Maxbytes,则超出部分被丢失。函数返回非负整数时表示实际读取的字节数,否则为ERROR。
对于Write(),参数Buffer和Nbytes表示要写入管道的数据缓冲区和缓冲数据字节长度。注意,Nbytes必须小于创建管道时指定的单条消息最大长度。成功时函数返回实际写入管道的字节数,总等于Nbytes,出错时函数返回ERROR。
函数Read()和Write()都可能阻塞。Write()允许从中断服务程序种调用,此时如果没有空闲缓冲区,函数立即返回ERROR而不阻塞。
管道文件不再使用时应该将其关闭,以减少I/O资源占用。由函数Close()完成。一般应该有和Open()个数相同的Close()。
返回列表