/*
** Description: ftp工具
** Input_parms: ip 目标系统IP地址
** user 目标系统用户名
** pass 目标系统密码
** dpath 目标系统存取文件的路径
** spath 本地系统存取文件的路径
** file 存取文件的名称
** mode 传输模式 mput-上传 mget-下载
** Return_value: 操作是否失败 0-否 1-是
*/
int
autoFTP(ip,user,pass,dpath,spath,file,mode)
char
*ip;
char
*user;
char
*pass;
char
*dpath;
char
*spath;
char
*file;
char
*mode;
{
FILE
*fp;
int
rc=0;
/*管道关闭返回码*/
char
acBuf[1024];
memset
( acBuf, 0x00,
sizeof
( acBuf ) );
FILE
*fp1;
/*读取标准输出信息文件指针*/
/*进入本地存取文件路径*/
chdir(spath);
/*打开FTP传输管道*/
if
((fp=popen(
"ftp -n"
,
"w"
))==NULL)
{
strcpy
(g_acRspMsg,
"打开FTP传输管道失败!"
);
ERRLOG
/*打印错误日志的宏 g_acRspMsg是已定义的全局变量*/
return
1;
}
if
(fp1=
freopen
(
"ftp.log"
,
"r"
, stdout) == NULL)
fprintf
(stderr,
"error redirecting\ stdout\n"
);
fprintf
(fp,
"open %s\n"
,ip);
fprintf
(fp,
"user %s %s\n"
,user,pass);
fprintf
(fp,
"prompt\n"
);
fprintf
(fp,
"cd %s\n"
,dpath);
fprintf
(fp,
"%s %s\n"
,mode,file);
/*文件传输*/
fprintf
(fp,
"bye\n"
);
fread
(acBuf,
strlen
(acBuf)+1, 1, fp1);
printf
(
"%s\n"
, acBuf);
/*读取到的都是上面fprintf输入的内容,没有输入命令后目标系统的响应信息*/
fclose
(fp1);
/*关闭管道取得shell命令执行返回码 -1:管道关闭失败 大于0:命令执行失败*/
rc=pclose(fp);
sprintf
( g_acTrcMsg,
"FTP返回码rc[%d]"
,rc);
TRCLOG4
/*打印跟踪日志的宏*/
if
(rc==-1)
{
strcpy
(g_acRspMsg,
"关闭FTP传输管道失败"
);
ERRLOG
return
1;
}
else
if
(rc>0)
{
sprintf
(g_acRspMsg,
"执行FTP命令出错,错误码[%d]"
,rc);
ERRLOG
return
1;
}
return
0;
}