📄 ftpcopy.c
字号:
/************************* ftpCopy.c ***************************
description:
-----------
将远程FTP服务器上的文件下载到本地文件系统上
(需要在目标机上建立本地文件系统,
比如基于RamDisk的dosFs等)
****************************************************************/
/***************************************************************
* INCLUDE FILES
***************************************************************/
#include "vxWorks.h"
#include "ftpLib.h"
#include "stdio.h"
#include "ioLib.h"
#define SYS_BASE_FS "/ram0/"
/***************************************************************
* FUNCTION
***************************************************************/
/***************************************************************
* ftpCopy()
*
* 参数
* serverAddr - FTP Server的地址
* ftpUser - FTP用户名
* ftpPwd - FTP 密码
* pSrcFileName - 存在本地文件系统的文件名
* pDesFileName - 要从服务器端下载的文件名
*
* 返回值
* OK
* ERROR
*
***************************************************************/
STATUS ftpCopy ( char* serverAddr, char* ftpUser, char *ftpPwd, char * pSrcFileName, char * pDestFileName )
{
int fd; /*数据传输套接字*/
int errFd; /* 控制套接字*/
int localFd; /*本地文件描述符*/
char localFname[50];
int maxSize = 0x10000; /*接收文件的最大值64K*/
char *compBuf = NULL; /*接收缓存指针*/
int compSize = 0; /*接收文件大小*/
int r = 0;
STATUS rc = OK;
memset( localFname , '\0' , 50 );
printf("starting connect host,please waiting...\n\r");
/*向FTP Server发送请求,建立连接,传输文件*/
if (ftpXfer (serverAddr, ftpUser, ftpPwd, "", "RETR %s", "", pSrcFileName,
&errFd, &fd) == ERROR)
{
printf("when downing file , found error.\n\r");
return ERROR;
}
if ((compBuf = malloc(maxSize)) == NULL) /*分配64K内存,用以接收文件*/
{
printErr("Not enough memory for image buffer\n");
rc = ERROR;
goto errorDo;
}
memset( compBuf , '\0' , maxSize );
compSize = 0;
while ((r = read(fd, /* 循环读取数据套接字中的数据*/
compBuf + compSize,
maxSize - compSize)) > 0)
compSize += r;
if (r < 0) /*读出错*/
{
printErr("Read failed: errno = %d\n", errnoGet());
rc = ERROR;
goto errorDo;
}
if (compSize == maxSize) /*传输文件大于64K*/
{
printErr("Compressed image too large\n");
rc = ERROR;
goto errorDo;
}
/*把传入的数据写入/ram0/desFile*/
printf("Saving image to %s ... ",localFname);
sprintf( localFname , "%s%s" , SYS_BASE_FS, pDestFileName);
if ((localFd = open(localFname, O_RDWR , 0)) != ERROR) /*如果/ram0/desFile 文件存在*/
{
close(localFd);
printf("This file is already exist!\n\r");
rc = ERROR;
}
else if ((localFd = open(localFname, O_RDWR | O_CREAT, 0644)) != ERROR) /*创建文件/ram0/desFile*/
{
write(localFd,compBuf,compSize);
close(localFd);
}
else
{
rc = ERROR;
}
errorDo:
if( compBuf ) /*释放内存*/
free( compBuf );
ftpCommand ( errFd, "QUIT",0,0,0,0,0,0); /*退出FTP 服务器*/
/*关闭套接字*/
if( fd )
close( fd );
if( errFd )
close( errFd );
if( rc != ERROR )
printf("\n\rsuccess.\n\r");
else
printf("\n\rfailure.\n\r");
return rc;
}
void showfile(char* file)
{
FILE* fp;
int cnt, i;
char buff[256];
fp = fopen(file, "r");
cnt = fread(buff, 1, 256, fp);
for(i = 0; i < cnt; i++)
printf("%c", buff[i]);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -