通过FTP实现vxsim和vxworks主机之间的文件传输

为实现vxworks的目标机(vxsim模拟器)和vxworks主机之间的文件传输,需要先搭建vxworks网络环境,当vxworks主机和vxsim能实现网络通信以后,再利用ftp协议就能实现vxworks和vxsim之间的文件传输了。

 

关于vxworks网络环境的搭建,可以参考《ULIP及vxsim网络配置》(https://files.cnblogs.com/lotusswan/ULIP.doc)一文。网上有很多相关的文章,这里不再详述,唯一需要说明一点的是:

     7、Launch target server,关闭Launch simulator后会提示你launch target server,点击Cancel,如果点击OK,会出现如下的错误提示:

"tgtsvr (vxTarget@heiwa): Wed Aug 25 00:17:08 1999

Wind River Systems Target Server: NT/Win95 version

Error: Target vxsim5 unknown. Attach failed.

Error: Backend initialization routine failed.

Problem during Backend initialization

Target Server will exit"

你根本无法连接上目标机。

当你按照上述的方式实现了主机和vxsim的通信以后,就可以编写ftp实现来实现文件传输了。

 

关于ftp的程序编写,其实是很容易的事情,vxworks已经为我们提供了几个API函数可供我们使用,这里主要介绍两个:ftpXfer和ftpCommand。对于ftpXfer,相信使用过tornado进行程序调试的朋友都不会陌生,当ftp没开或者是网络故障时,目标机在进行加载的时候往往就会报错:ftpXfer error,这个时候就是调用这个函数返回了错误码。下面我们看看这个函数的具体用法:

STATUS ftpXfer
    (
    char * host,              /* ftp服务器的IP地址,点分十进制,格式类似于"127.0.0.1"*/
    char * user,              /* 访问ftp服务器的用户名*/
    char * passwd,            /* 访问ftp服务器的密码 */
    char * acct,              /* 一般不用,直接填写为空字符串就可以了。*/
    char * cmd,               /* 发送给FTP服务器的命令,例如读取命令为"RETR"*/
    char * dirname,           /* 待访问文件所在的目录*/
    char * filename,          /* 待访问文件的文件名*/
    int *  pCtrlSock,         /* 存储返回的control socket文件描述符,也就是常说的fd*/
    int *  pDataSock          /* 存储返回的待访问文件的文件描述符*/
    )

相信看到函数声明以后,就会明白该函数的使用方式了,如果出错,返回值为ERROR。

 

下面再来看看ftpCommand的描述:

int ftpCommand
    (
    int    ctrlSock,          /* control socket的文件描述符 */
    char * fmt,               /* 待传递的ftp命令 */
    int    arg1,              /* ftp命令的参数*/
    int    arg2,
    int    arg3,
    int    arg4,
    int    arg5,
    int    arg6
    )
和ftpXfer一样,使用方式十分简单。

 

知道这两个函数以后,可以开始编写程序了,下面给出一个实例:

 

#include "errnoLib.h"
#include "ftpLib.h"

#define HOST "192.168.255.254"
#define USER "target"
#define PWD "123"
#define W_DIR "d:/downloads"
#define RD_CMD "RETR %s" /*get file from ftp server*/
#define FILE "log.txt"

void ftpGo()
{
 /*semGive(sem_ftp); */
}

void ftp()
{
 int ctrlSock;
 int dataSock;
 char buf[512];
 int nBytes;

 if(ERROR == ftpXfer(HOST, USER, PWD, "", RD_CMD, W_DIR, FILE, &ctrlSock, &dataSock))
 {
  printf("\r\n ftp connected failed!");
  return ;
 }

 while((nBytes = read(dataSock, buf, sizeof(buf))) > 0)
 {
  printf("\r\n it is [%s]", buf);
 }

 close(dataSock);

 if(ERROR == nBytes)
  printf("\r\nit is reading error.");

 if(ftpCommand(ctrlSock, "QUIT", 0, 0, 0, 0, 0, 0) == FTP_COMPLETE)
  printf("\r\nftp is completed");
 close(ctrlSock);
}

 

程序编写完成以后,就是调试了,调试也是很容易,直接在shell下输入ftp就可以看到主机上的文件内容被打印在屏幕上了。不过需要说明一点的是,vxworks自带的vxsim是不支持ftp访问的,因此需要自己编译一个vxsim虚拟机并且加上ftp client组件,至于这部分内容如何做到,相信你看完了《ULIP及vxsim网络配置》一文,应该不会有疑问。

 

祝大家好运!

posted @ 2008-09-07 20:09  Articles about .NET  阅读(4766)  评论(0编辑  收藏  举报