VxWorks的输出重定向, 首先推荐大家看一下这篇文章《VxWorks for X86的输入输出定向》,对VxWorks里的重定向有个初步认识
VxWorks系统里的定向主要有2种,定向输出输入全局的和任务级的。
#ifdef INCLUDE_IO_BASIC
if (consoleFd != NONE)
{
ioGlobalStdSet (STD_IN, consoleFd);
ioGlobalStdSet (STD_OUT, consoleFd);
ioGlobalStdSet (STD_ERR, consoleFd);
}
#endif
顾名思义,默认的输入输出设备,全局有效,一般它可以是串口或者pcconsole,如所有的printf的输出口。
ioTaskStdSet (0,STD_IN, consoleFd);
ioTaskStdSet (0,STD_OUT, consoleFd);
ioTaskStdSet (0,STD_ERR, consoleFd);
VxWorks系统里的本身很多代码如一些dbg代码使用了这种模式,任务级重定向顾名思义, 只针对当前的任务有效。
VxWorks里任何块设备都可以mount到dosfs或者hrfs文件系统上,VxWorks本身似乎没有什么API可以获得这些卷的大小,dosfs的话可以调用dosFsShow看volume信息,但是没有显示volume大小和free大小,有没有什么方法可以得到呢?
可以用这个API写个函数来实现。
STATUS statfs
(
char *name,
struct statfs *pStat
)
这个函数最终会调到下面这个系统调用上:
#define FIOFSTATFSGET 46
ioctl (fd, FIOFSTATFSGET, (int)pStat);
这个函数大概可以这样写:
STATUS volumeShow
(
char *devName
)
{
......
struct statfs fs;
statfs ((char*)devName, &fs)
printf ("%s: Total File System Size: %dKB, Free space: %dKB.\n", devName, (int)(fs.f_bsize * fs.f_blocks /1024), (int)(fs.f_bsize * fs.f_bavail /1024));
......
}
e.g:
-> volumeShow "/tffs0"
/tffs0: Total File System Size: 3824KB, Free space: 3821KB.
位于安装目录下:\docs\vxworks\guide\index.html
#include "taskLib.h"
#include "msgQLib.h"
#include "semLib.h"
#include "ioLib.h"
#include "wdLib.h"
#include "logLib.h"
#include "socket.h"
1、系统中的IO设备,包括键盘、串口、文件等,都用统一的接口访问。第一步通常先得到文件描述符,然后进行读写或者设置的工作,最后关闭该描述符。
2、内存文件
Init() {
uchar_t buffer[1024];
int fd;
memDrv( );
memDevCreate("/mem/mem1", buffer, sizeof(buffer));
if ((fd = open("/mem/mem1", O_RDWR, 0644)) != ERROR) {
write(fd, &data, sizeof(data));
... ...
close(fd);
}
memDevDelete("/mem/mem1");
}
3、通过Select函数实现多个IO监听:selectLib.h
© 2025 VxWorks Club