1. FTP介绍
(1)主动模式(PORT): 服务器主动去连接客户端的数据端口
(2)被动模式(PASV): 客户端主动去连接服务器的数据端口
ftp客户端通信流程(编程流程)如下: 1. 客户端用账号、密码进行登录。 2. 提交主动模式还是被动模式。 3. 如果是被动模式,需要去连接服务器开放的数据传输端口 4. 发送指令到服务器的控制端口,获取服务器返回结果 5. 上传文件夹、上传文件 6. 下载文件夹、下载文件
2. 相关函数介绍
ftp中封装的相关函数太多,只介绍主要的函数。
2.1 dir_list.c (构建目录下文件链表)
以某一个目录下全都是普通文件,不包含子目录来讲解。(因为感觉存在子目录时代码有问题)
数据结构: //目录或文件节点 typedef struct _dir_node { char *file_name; //文件(目录名)名,例如:aaa.txt char *dir_name; //绝对路径文件名,例如:/home/root/aaa.txt int is_dir; //1表示是目录文件,2表示是普通文件 }dir_node; //目录链表:存储某个目录下的所有文件 typedef struct _dir_list { dir_node **list; //指向文件节点指针的指针 int count; //当前目录下的文件计数 int is_local; //1:表示是本地客户端中目录。 该标志在下载或上传时会用到 //0:表示是ftp服务器中目录 }dir_list;
重要函数 /*该函数做的事情: (1)创建了一个dir_list目录链表结构; (2)创建了length个dir_node *指针,并让dir_list.list指向这些。 */ (1)dir_list* create_dir_list(int length,int dir_is_local) /*该函数做的事情:(感觉该函数有bug) (1)把一个目录下所有文件(包括目录文件,但除了.和..)加入到目录链表中 (2)如果该目录下的最后一个文件是目录文件,则将子目录下的文件也加入到目录链表中(递归) 注意:如果存在子目录,则该函数可能存在问题 */ (2)int get_dir_list(dir_list *p_dir_list,char *cur_dir)
最终得到的结果
标签:ftp,文件,--,list,链表,int,目录,dir,库函数 From: https://www.cnblogs.com/dkhlaojogo/p/18259375