转眼兴奋的五一小长假就要到来了,在放假前夕还是需要保持一颗淡定的心,上次中已经对miniFTP有基础框架进行了搭建,这次继续进行往上加代码,这次主要还是将经历投射到handle_child()服务进程上来,其它的先不用关心:
而它主要是完成FTP协议相关的功能,所以它的实现放在了ftpproto.c,目前连接成功之后效果是:
其中"USER webor2006"后面是包含" "的,FTP的协议规定每条指令后面都要包含它,这时handle_child()函数就会收到这个命令并处理,再进行客户端的一些应答,客户端才能够进行下一步的动作,由于目前还没有处理该命令,所以客户端阻塞了,接下来读取该指令来打印一下:
编译运行:
接下来命令中的 ,接下来的操作会涉及到一些字符串的处理,所以先来对其进行封装一下,具体字符串的处理函数如下:
这里创建一个新的字符串模块,来将上面相关的函数都放一起:
str.h:
#ifndef _STR_H_ #define _STR_H_ void str_trim_crlf(char *str); void str_split(const char *str , char *left, char *right, char c); int str_all_space(const char *str); void str_upper(char *str); long long str_to_longlong(const char *str); unsigned int str_octal_to_uint(const char *str); #endif /* _STR_H_ */
str.c:
#include "str.h" #include "common.h" void str_trim_crlf(char *str) { } void str_split(const char *str , char *left, char *right, char c) { } int str_all_space(const char *str) { return 1; } void str_upper(char *str) { } long long str_to_longlong(const char *str) { return 0; } unsigned int str_octal_to_uint(const char *str) { unsigned int result = 0; return 0; }
接下来一个个函数实现:
①:去除字符串 :rhstr_trim_crlf()
实现思路:
void str_trim_crlf(char *str) { char *p = &str[strlen(str)-1]; while (*p == ' ' || *p == ' ') *p-- = '