91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .gz
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-12
  • 語言: 其他
  • 標簽: FTP客戶端??

資源簡介

N年前寫的FTP客戶端,練習程序,支持常用命令,支持PASV與PORT模式 對應的服務器端為: http://download.csdn.net/source/2724443

資源截圖

代碼片段和文件信息

/*****************************************************************************/
/*??file?name:?dir_list.c ?*/
/*??author:?Tao?Tong ?*/
/*??function:?create?a?list?to?store?directories?and?find?the?sub?dir? ?*/
/*****************************************************************************/

#include?
#include?
#include?
#include?
#include?
#include?
#include?“dir_list.h“

dir_list*?create_dir_list(int?length?int?dir_is_local)
{
dir_list*?p_dir_list?=?(dir_list*)malloc(sizeof(dir_list));
p_dir_list->list?=?(dir_node**)malloc(sizeof(dir_node*)?*?length);
p_dir_list->count?=?0;
if?(dir_is_local)
p_dir_list->is_local?=?1;
else
p_dir_list->is_local?=?0;
return?(p_dir_list);
}

dir_node*?create_dir_node(char*?up_level_name?char*?dir_name)
{
dir_node*?p?=?(dir_node*)malloc(sizeof(dir_node));
p->dir_name?=?(char*)malloc(sizeof(char)?*?(strlen(up_level_name)?+?strlen(dir_name))?+?4);
strcpy(p->dir_name?up_level_name);
if?(strlen(p->dir_name)?>?0) strcat(p->dir_name?“/“);
strcat(p->dir_name?dir_name);
p->is_dir?=?0;
return?(p);
}

int?add_dir_list(dir_list*?p_dir_list?char*?up_level_name?char*?dir_name)
{
p_dir_list->list[p_dir_list->count]?=?create_dir_node(up_level_name?dir_name);
if?(p_dir_list->is_local)
{
p_dir_list->list[p_dir_list->count]->is_dir?=?local_is_dir(p_dir_list->list[p_dir_list->count]->dir_name);
}
p_dir_list->count++;
return?(p_dir_list->count);
}

int?modify_last_node_to_dir(dir_list*?p_dir_list)
{
p_dir_list->list[p_dir_list->count?-?1]->is_dir?=?1;
return?(0);
}

int?get_last_node_mode(dir_list*?p_dir_list)
{
return?(p_dir_list->list[p_dir_list->count?-?1]->is_dir);
}

char*?get_last_node_name(dir_list*?p_dir_list)
{
return?(p_dir_list->list[p_dir_list->count?-?1]->dir_name);
}

int?clean_dir_list(dir_list*?p_dir_list)
{
int?i?=?0;
for?(i?=?0;?i?count;?i++)
{
free(p_dir_list->list[i]->dir_name);
free(p_dir_list->list[i]);
}
free(p_dir_list->list);
free(p_dir_list);
return?(0);
}

int?local_is_dir(char*?dirname)
{
struct?stat?buf;
stat(dirname?&buf);
// printf(“local_is_dir:?%s\n“?dirname);
return?S_ISDIR(buf.st_mode);
}

int?get_dir_list(dir_list*?p_dir_list?char*?cur_dir)
{
DIR*?pdir;
struct?dirent*?pdirent;
if?(NULL?==?(pdir?=?opendir(cur_dir)))
{
perror(“opendir“);
return?(-1);
}
while?(NULL?!=?(pdirent?=?readdir(pdir)))
{
if?(!strcmp(pdirent->d_name?“.“)?||?!strcmp(pdirent->d_name?“..“)) continue;
add_dir_list(p_dir_list?cur_dir?pdirent->d_name);
if?(get_last_node_mode(p_dir_list))
{
get_dir_list(p_dir_list?get_last_node_name(p_dir_list));
}
}
closedir(pdir);
return?(0);
}

評論

共有 條評論