Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225310
  • 博文数量: 49
  • 博客积分: 2101
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-07 10:38
文章分类

全部博文(49)

文章存档

2010年(49)

我的朋友

分类: 嵌入式

2010-09-07 13:56:38

1 标准输入输出设备

vxWorks中,当打开设备时,会返回文件描述符,即设备将会以文件的形式来提供给用户操作。文件描述符就是一个int类型的整数,但是打开设备时返回的文件描述符的值总是大于2。这是因为012vxWorks系统保留为STD_INSTD_OUTSTD_ERR即标准输入、标准输出及标准错误输出设备。实际上标准输入输出设备的存在很让人迷惑。标准输入输出设备应该理解为逻辑上存在的设备,它不是具体的设备,但是它可以指向任何设备。每个任务,都有自己逻辑上的标准输入输出设备,任务的输出和输入动作都是和标准输入输出这些逻辑设备打交道。 而标准输入输出设备如何指向实际的设备就是IO重定向来完成的。

 

 

2 IO重定向

IO重定向的本质是什么?就是给系统或单个任务确定其标准输入输出设备指向的真正设备,就是把标准输入输出设备定向的到用户希望的设备上。在未做IO重定向之前,任务的标准输入输出设备指向的设备文件描述符就是自身,而自身012是不存在的设备,所以任务无法获得输入并且输出也是无效的。

vxWorks为例,它提供的IO重定向功能有两种,全局IO重定向和任务IO重定向。全局IO重定向是对任务IO重定向的有效补充。主要就是当一个任务没有进行有效的IO重定向时,它将使用全局标准输入输出设备。下面使用例子详细说明全局IO重定向。

假设seiralFd是一个串行设备打开后返回的文件描述符,并且它的值是3

(1)       在未做IO重定向之前,使用printfget函数都是没有效果的

(2)       使用ioGlobalStdSetSTD_IN, seiralFd)类似的用法来把全局标准输入输出定向到我们的串口seiralFd,这样printfget就会从串口设备输出和获取内容。

(3)       但是用printfget还不足以说明的IO重定向的精要。我们来使用writeread这两个标准函数。Writeread共同的特点是需要指定输出或输入设备。以write为例,其原型为

    int write
   (
    int    fd,      /* file descriptor on which to write */
    char * buffer,  /* buffer containing bytes to be written */
    size_t nbytes   /* number of bytes to write */
    )

用户可以这么写writeSTD_OUT,”hello”,6;

此时,STD_OUT的实际值是1,但是这句将会向seiralFd即文件描述符3输出hello这个字符串。

阅读(1579) | 评论(0) | 转发(0) |
0

上一篇:sysSerial.c详解

下一篇:系统时间

给主人留下些什么吧!~~