Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103631695
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 22:41:50

作者:zengok  出处:Unix爱好者家园unix-cd.com   
如下代码可以实现 unix to unix 的文件发送.

#include  
#include  

#define NORMAL 0 
#define ABNORMAL 1 
#define ON 1 
#define OFF 0 

main (argc, argv) 
int argc; 
char *argv[]; 

FTPINFO ftpinfo; 
void usage(), check_n_close(); 
char *progname; 
char *host; 

progname = (char *) argv[0]; 
if ( argc < 2 ) 
(void) usage(progname); 

host = argv[1]; 
ftpinfo.debug = ON; 
ftpinfo.transf_calc = ON; 
ftpinfo.linger = OFF; 

/* 
* connect to peer at remote host. 
*/ 
if (ftp_prconnect ( &ftpinfo, host ) < 0) { 
printf("error: ftp_prconnect failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* send user name to the remote server. 
*/ 
if (ftp_user( &ftpinfo, "bank" ) < 0) { 
printf("error: ftp_user failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* send user password to the remote server. 
*/ 
if (ftp_passwd ( &ftpinfo, "" ) < 0) { 
printf("error: ftp_passwd failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* set the idle time for this connection. 
*/ 
if (ftp_idle ( &ftpinfo, "7200" ) < 0) { 
printf("error: ftp_idle failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* do a 'cd' on the remote ftp server. 
*/ 
if (ftp_chdir( &ftpinfo, "winnt" ) < 0) { 
printf("error: ftp_chdir failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* do a 'pwd' on the remote ftp server. 
*/ 
if (ftp_pwd ( &ftpinfo ) < 0) { 
printf("error: ftp_pwd failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* set transfer mode to ascii. 
*/ 
if (ftp_ascii ( &ftpinfo ) < 0) { 
printf("error: ftp_ascii failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* set transfer mode to binary. 
*/ 
if (ftp_binary ( &ftpinfo ) < 0) { 
printf("error: ftp_binary failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* set transfer mode back to ascii - using ftp_settype. 
*/ 
if (ftp_settype ( &ftpinfo, ASCII ) < 0) { 
printf("error: ftp_settype failed in ascii mode.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* set transfer mode back to binary - using ftp_settype. 
*/ 
if (ftp_settype ( &ftpinfo, BINARY ) < 0) { 
printf("error: ftp_settype failed in binary mode.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* make a directory under /tmp on the server. 
*/ 
if (ftp_mkdir ( &ftpinfo, "prem" ) < 0) { 
printf("error: ftp_mkdir failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* change the mode of the directory created above. 
*/ 
if (ftp_site ( &ftpinfo, "chmod 775 prem" ) < 0) { 
printf("error: ftp_site failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* remove the directory created above. 
*/ 
if (ftp_rmdir ( &ftpinfo, "prem" ) < 0) { 
printf("error: ftp_rmdir failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* quit the FTP session decently. 
*/ 
if (ftp_bye( &ftpinfo ) < 0) { 
printf("error: ftp_bye failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* use ftp_login to login into the remote ftp server and quit. 
*/ 
if (ftp_login ( &ftpinfo, host, "bank""", NULL ) < 0) { 
printf("error: ftp_login failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* do a 'put' to the remote host. 
*/ 
if (ftp_putfile ( &ftpinfo, "/tmp/passwd""c:/passwd" ) < 0) { 
printf("error: ftp_putfile failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 

else { 
printf("transfer speed: \n"); 
printf("\t\tbytes transferred = %ld\n"
ftpinfo.speed.size_bytes); 
printf("\t\ttime taken = %.2g seconds\n"
ftpinfo.speed.seconds); 
printf("\t\trate = %.2g Kbytes/s\n"
ftpinfo.speed.kbs); 


/* 
* set transfer mode back to ascii - using ftp_settype. 
*/ 
if (ftp_settype ( &ftpinfo, ASCII ) < 0) { 
printf("error: ftp_settype failed in ascii mode.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* do a 'get' from the remote host. 
*/ 
if (ftp_getfile ( &ftpinfo, "/tmp/passwd","c:/passwd" )< 0){ 
printf("error: ftp_getfile failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 

else { 
printf("transfer speed: \n"); 
printf("\t\tbytes transferred = %ld\n"
ftpinfo.speed.size_bytes); 
printf("\t\ttime taken = %.2g seconds\n"
ftpinfo.speed.seconds); 
printf("\t\trate = %.2g Kbytes/s\n"
ftpinfo.speed.kbs); 


/* 
* list /tmp on remote host to file /tmp/test. 
*/ 
if (ftp_dir ( &ftpinfo, "/tmp""/tmp/test" ) < 0) { 
printf("error: ftp_dir failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* list /tmp on remote host to stdout. 
*/ 
if (ftp_dir ( &ftpinfo, "/tmp", NULL ) < 0) { 
printf("error: ftp_dir failed to write to stdout.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* delete the file on the remote host. 
*/ 
if (ftp_del ( &ftpinfo, "/tmp/asciifile" ) < 0) { 
printf("error: ftp_del failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* quit the FTP sessions decently. 
*/ 
if (ftp_bye( &ftpinfo ) < 0) { 
printf("error: ftp_bye failed.\n"); 
(void) check_n_close ( &ftpinfo, ABNORMAL ); 


/* 
* we're done with our job...so exit the program gracefully. 
*/ 
(void) check_n_close ( &ftpinfo, NORMAL ); 




void 
usage(progname) 
char *progname; 

printf("usage: %s \n", progname); 
exit (1); 


void 
check_n_close ( ftpinfo, status ) 
FTPINFO *ftpinfo; 
int status; 

if (ftpinfo -> sockfd >= 0) 
close (ftpinfo -> sockfd); 
if (status == ABNORMAL) 
printf("error: %s\n", ftpinfo -> ftp_msg); 
else 
printf("success: %s\n", ftpinfo -> ftp_msg); 

printf("final reply from server: %d\n", ftpinfo -> reply); 
fflush ( stdout ); 
exit (status); 
}


编译:cc prog.c -o prog -lftp
阅读(618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~