C语言使用popen获得FTP命令的输出信息

来源:互联网 发布:windows退出安全模式 编辑:程序博客网 时间:2024/06/10 22:03
/*
**  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; 
}

原创粉丝点击