您的位置:首页 > 编程语言 > PHP开发

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

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

关于vxworks网络环境的搭建,可以参考《ULIP及vxsim网络配置》(http://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网络配置》一文,应该不会有疑问。

祝大家好运!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐