我朋友的机器没装sybase请看
http://www.csdn.net/expert/topic/168/168642.shtm

解决方案 »

  1.   

    /***************************************************************
    *     Author       :   leechie                                 *
    *     Date         :   2001/06/22                              *
    *     Email        :   [email protected]                         *
    *     Descriptions :   This is the FTP application use FTP API *
    ****************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/fcntl.h>
    #include <dirent.h>
    #include <net/libftp.h>#define NORMAL  0
    #define ABNORMAL        1
    #define ON              1
    #define OFF             0char DownLoadDir[256];
    char UpLoadDir[256];
    char HostName[256];
    char UserName[256];
    char PassWord[256];
    FTPINFO ftpinfo;void check_n_close();
    char *ScanStr(char *sstr,char *dstr);
    char *PraseFile(char *filename);
    char *readline(int fd);
    int dirfun(char *dirname,int fd1,int fd2);
    char *GetConfig(char *InVal);
    int PutFile();
    int MkDir();int main(int argc,char *argv[])
    {
        int fd1,fd2;
                 
        strcpy(DownLoadDir,GetConfig("DownLoadDir"));
        strcpy(UpLoadDir,GetConfig("UpLoadDir"));
        strcpy(HostName,GetConfig("HostName"));
        strcpy(UserName,GetConfig("UserName"));
        strcpy(PassWord,GetConfig("PassWord"));
        
        ftpinfo.debug = ON;
        ftpinfo.transf_calc = ON;
        ftpinfo.linger = OFF;
        
        printf("%s\t%s\t%s\t%s\n",DownLoadDir,UpLoadDir,HostName,UserName,PassWord);
       
        unlink("/tmp/myftpfile.tmp");
        unlink("/tmp/myftpdir.tmp");    
        fd1=open("/tmp/myftpfile.tmp",O_RDWR|O_CREAT|O_EXCL,0666);
        if(fd1<0)
        {
          perror("Open");
          exit(1);
        } 
        
        fd2=open("/tmp/myftpdir.tmp",O_RDWR|O_CREAT|O_EXCL,0666);
        if(fd2<0)
        {
          perror("Open");
          exit(1);
        }
        dirfun(DownLoadDir,fd1,fd2);
        close(fd1);
        close(fd2);
        MkDir();
        PutFile();           
        exit(0);
    }char *GetConfig(char *InVal)
    {
        char *tmpbuf;
        char workbuf[256];
            
        if((tmpbuf=getenv(InVal))==NULL)
        {
            fprintf(stderr,"[%s]\t>",InVal);
            gets(workbuf);
            tmpbuf=&workbuf[0];
        }
                 
        return(tmpbuf);       
    }char *readline(int fd)
    {
        char ch,tmpbuf[256];
        int i=0;
        
        memset(tmpbuf,'\0',256);
        while(read(fd,&ch,1)==1)
        {
         if(ch=='\n')
             break;
         else if(ch==EOF)
         {
             tmpbuf[0]='\0';
             return(NULL);
         }
         else
             tmpbuf[i++]=ch;
        }
        tmpbuf[i]='\0';
        
        return(&tmpbuf[0]);
    } char *ScanStr(char *sstr,char *dstr)
    {
         while(*(sstr++)==(*dstr++))
             ;
         
         printf("str=[%s]\n",dstr);
         
         return(dstr);
    }char *PraseFile(char *filename)
    {
        char *workbuffer;
        
        workbuffer=ScanStr(DownLoadDir,filename);
        
        return(&workbuffer[0]);
    }int MkDir()
    {
        char *dirname;
        int fd;
        
        fd=open("/tmp/myftpdir.tmp",O_RDWR,0666);
        if(fd<0)
               return(1);
        
        if (ftp_login ( &ftpinfo, HostName, UserName,PassWord , NULL ) < 0)
        {
               fprintf(stderr,"error: ftp_login failed.\n");
               check_n_close ( &ftpinfo, ABNORMAL );
        }
        
        if (ftp_chdir( &ftpinfo, UpLoadDir ) < 0)
        {
               fprintf(stderr,"error: ftp_chdir failed.\n");
               (void) check_n_close ( &ftpinfo, ABNORMAL );
        }
        
        if (ftp_pwd ( &ftpinfo ) < 0)
        {
                fprintf(stderr,"error: ftp_pwd failed.\n");
                (void) check_n_close ( &ftpinfo, ABNORMAL );
        }
        
        while((dirname=readline(fd))!=NULL)
        {
            if(dirname[0]=='\0')
                break;
            dirname=PraseFile(dirname);
            printf("dirname:[%s]\n",dirname);
            
               if (ftp_mkdir ( &ftpinfo,dirname ) < 0) 
               {
                       fprintf(stderr,"error: ftp_mkdir failed.\n");
                       check_n_close ( &ftpinfo, ABNORMAL );
                       return(1);
                }
               
        }
        
        if (ftp_bye( &ftpinfo ) < 0)
        {
                fprintf(stderr,"error: ftp_bye failed.\n");
                (void) check_n_close ( &ftpinfo, ABNORMAL );
        }
        
        close(fd);
        return(0);
    }int PutFile()
    {
        char *filename,*dfilename;
        int fd;
        
        filename=(char *)malloc(sizeof(char)*256);
        dfilename=(char *)malloc(sizeof(char)*256);
        
        fd=open("/tmp/myftpfile.tmp",O_RDWR,0666);
        if(fd<0)
               return(1);
        
        if (ftp_login ( &ftpinfo, HostName, UserName, PassWord, NULL ) < 0)
        {
               fprintf(stderr,"error: ftp_login failed.\n");
               (void) check_n_close ( &ftpinfo, ABNORMAL );
               return(2);
         }
                   
         if (ftp_chdir( &ftpinfo, UpLoadDir ) < 0)
         {
               fprintf(stderr,"error: ftp_chdir failed.\n");
               (void) check_n_close ( &ftpinfo, ABNORMAL );
         }
                       
         while((filename=readline(fd))!=NULL)
         {
             dfilename=PraseFile(filename);
             printf("filename:[%s] dfilename:[%s]\n",filename,dfilename);
             if (ftp_putfile ( &ftpinfo,"/etc/passwd","/tmp/passwd" ) < 0)
               {
                        fprintf(stderr,"error: ftp_putfile failed.\n");
                        (void) check_n_close ( &ftpinfo, ABNORMAL );
               }
               else
               {
                        fprintf(stderr,"transfer speed: \n");
                        fprintf(stderr,"\t\tbytes transferred = %ld\n",
                                  ftpinfo.speed.size_bytes);
                        fprintf(stderr,"\t\ttime taken        = %.2g seconds\n",
                                  ftpinfo.speed.seconds);                        
                        fprintf(stderr,"\t\trate              = %.2g Kbytes/s\n",
                                  ftpinfo.speed.kbs);
                }
                            
         }
         
         if (ftp_bye( &ftpinfo ) < 0)
         {
                fprintf(stderr,"error: ftp_bye failed.\n");
                (void) check_n_close ( &ftpinfo, ABNORMAL );
         }
         close(fd);
         
         return(0);
    }int dirfun(char *dirname,int fd1,int fd2)
    {
        DIR *dp;
        char namebuf[256],tmpname[256];
        struct dirent *dirp;
        struct stat buf;
                     
        memset(namebuf,0,256);
        strcpy(namebuf,dirname);
        if((dp=opendir(namebuf))==NULL)
             return(1);
        while((dirp=readdir(dp))!=NULL)
        {
            memset(namebuf,0,256);
            strcpy(namebuf,dirname);
         if(!strncmp(dirp->d_name,".",1))
                  continue;
            strcat(namebuf,"/");
            strcat(namebuf,dirp->d_name);
             
            if(stat(namebuf,&buf)<0)
                  continue;
            else
            {
                  if(S_ISREG(buf.st_mode))
                  {
                         strcpy(tmpname,namebuf);
                         strcat(tmpname,"\n");
                         write(fd1,tmpname,strlen(tmpname));
                  }
                  else if(S_ISDIR(buf.st_mode))
                  {
                         strcpy(tmpname,namebuf);
                         strcat(tmpname,"\n");
                         write(fd2,tmpname,strlen(tmpname));
                         dirfun(namebuf,fd1,fd2);
                  }
                  else
                  {
                          continue;
                  }
            }
        }
        close(dp);
        
        return(0);
    }void check_n_close ( ftpinfo, status )
    FTPINFO *ftpinfo;
    int     status;
    {
           if (ftpinfo -> sockfd >= 0)
                    close (ftpinfo -> sockfd);
           if (status == ABNORMAL)
                    fprintf(stderr,"error: %s\n", ftpinfo -> ftp_msg);
           else
                    fprintf(stderr,"success: %s\n", ftpinfo -> ftp_msg);       fprintf(stderr,"final reply from server: %d\n", ftpinfo -> reply);
           fflush ( stdout );
           
           exit (status);
    }
    都是他惹的祸!!!