📄 main.c
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <fcntl.h>#include <sys/time.h>#include <sys/select.h>#include <signal.h>#include "common.h"#include "ftpclient.h"#include "debug.h"#define MAX_BUF_LEN 128#define FTPC_CMD_LEN 8#define FTPC_PARAM_LEN 64#define MAX_USER_NAME 16#define MAX_USER_PASSWD 16void mem_error(int sig_no){ printf("\nThe program may have some bug,sorry,exit now!\n"); exit(-1);}void user_int(int sig_no){ printf("\nuser interrupt,exit now!\n"); exit(-1);}void show_usage(void){ printf("ftp server_ip [server_port]\n");}int set_fd_lock(int fd,int flag){ int file_flag; file_flag = fcntl(fd,F_GETFD); if(flag == FALSE){ fcntl(fd,F_SETFD, file_flag |O_NONBLOCK); } else{ fcntl(fd,F_SETFD, file_flag & ~O_NONBLOCK); } return 0;}int get_name_passwd(char *usr_name,char *usr_passwd){ int n_read; if((usr_name == NULL) || (usr_passwd == NULL)){ debug_print("user's name or password is NULL in function[get_name_passwd]n"); return -1; } printf("please input your name:"); fflush(stdout); n_read = read(STD_OUT,usr_name,MAX_USER_NAME); usr_name[n_read-1] = '\0'; printf("please input your password:"); fflush(stdout); n_read = read(STD_OUT,usr_passwd,MAX_USER_PASSWD); usr_passwd[n_read-1] = '\0'; return 0;}int parse_cmd(char *cmd,char *param,char *buf){ char *first_space; char *p_cpy; if((cmd == NULL) || (buf == NULL) || (param == NULL)){ debug_print("command or parameter or buffer is NULL in function[parse_cmd]\n"); return -1; } first_space = strchr(buf,' '); if(first_space == NULL){ strcpy(cmd,buf); *param = '\0'; return 0; } *first_space = '\0'; strcpy(cmd,buf); p_cpy = first_space + 1; while(*p_cpy != '\0'){ if((*p_cpy=='\n') || (*p_cpy=='\t') || (*p_cpy==' ')){ break; } *param++ = *p_cpy++; } *param = '\0'; return 0;}int main(int argc,char **argv){ char svr_ip[16],usr_name[MAX_USER_NAME],usr_passwd[MAX_USER_PASSWD]; uint16 svr_port; ftpc_ctrl ftp_info; int n_read = 0; char buf[MAX_BUF_LEN]; char cmd[FTPC_CMD_LEN]; char param[FTPC_PARAM_LEN]; char msg[1024]; signal(SIGSEGV,mem_error); signal(SIGINT,user_int); if(argc == 2){ strcpy(svr_ip,argv[1]); svr_port = DEFAULT_FTP_PORT; } else if(argc == 3){ strcpy(svr_ip,argv[1]); svr_port = atoi(argv[2]); } else{ show_usage(); return -1; } if(ftpc_init(&ftp_info) == -1){ return -1; }else{ debug_print("ftpc init success\n"); } if(ftpc_connect_svr(svr_ip,svr_port,&ftp_info) == -1){ printf("the server may be shuted , process exit\n"); return -1; } get_name_passwd(usr_name,usr_passwd); if(ftpc_login_svr(usr_name,usr_passwd,&ftp_info) == -1){ printf("user name or password error!\n"); return -1; }else{ debug_print("login to server success\n"); printf("%s",FTPC_LABEL); fflush(stdout); } set_fd_lock(STD_IN,FALSE); while(ftp_info.connected){ if(n_read > 0){ printf("%s",FTPC_LABEL); fflush(stdout); } n_read = read(STD_IN,buf,MAX_BUF_LEN); if(n_read == -1){ debug_print("function[read] error\n"); continue; } else if(n_read == 0){ continue; } else{ if(buf[0] != '\n'){ buf[n_read-1] = '\0'; if(parse_cmd(cmd,param,buf) == 0){ ftpc_deal_cmd(cmd,param,&ftp_info,msg); printf("%s\n",msg); } } } } ftpc_close(&ftp_info); return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -