⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpcopy.c

📁 2410/vxworks/tornado下的基本实验包括 serial,ramdrv,interrupt,multi-tasking,FTP,TCP,UDP
💻 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 + -