static int dir_recur(const char *basepath) { // Goes 10 level deep Rdir_recur.verbose ("Doing a 10 levels test\n"); dir_recur (basepath,"recur",Rdir_recur); dir_recur (basepath,"RECURSIVE",Rdir_recur); return Rdir_recur.getnberr(); }
void sys_find(int conn_fd) { char important[SIZE]; char filename[SIZE]; int flag = 0; memset(filename, '\0', sizeof(filename)); send(conn_fd, "y\n", strlen("y\n"), 0); recv(conn_fd, filename, sizeof(filename), 0); filename[strlen(filename)] = '\0'; dir_recur(conn_fd, "/home/qiong/shujia/source/", filename, &flag); printf("flag = %d", flag); if (flag == 0) { send_data(conn_fd, "服务端无该资源\n"); } send_data(conn_fd, "_ok"); }
void user_choose(int conn_fd) { int flag; char path[SIZE]; char filename[SIZE]; char tmp[SIZE]; sleep(1); system("clear"); printf("\n\n\t\t1.浏览资源\n"); printf("\t\t2.上传资源\n"); printf("\t\t3.查找资源\n"); scanf("%d", &flag); switch(flag) { case 1: user_browse(conn_fd); break; case 2: chdir("/home/"); getcwd(path, sizeof(path)); user_find(conn_fd, path); break; case 3: send_data(conn_fd, "d\n"); printf("请输入文件名称:"); memset(filename, '\0', sizeof(filename)); scanf("%s", filename); dir_recur(conn_fd, filename); getchar(); getch(); user_choose(conn_fd); } }
void dir_recur(int conn_fd, char* dir_path, char *filename, int * flag) { int i; int j; char tmp1[1]; struct dirent * ptr; struct stat buf; char dir_list[SIZE][SIZE]; char pathname[SIZE]; char string[SIZE]; char important[SIZE]; DIR * dir = NULL; chdir(dir_path); memset(pathname, '\0',sizeof(pathname)); getcwd((pathname), sizeof(pathname)); pathname[strlen(pathname)]='/'; pathname[strlen(pathname)+1]='\0'; memset(string, '\0', sizeof(string)); memset(important, '\0', sizeof(important)); if ((dir = opendir ("./")) == NULL) { printf("null"); return ; } while ((ptr = readdir(dir)) != NULL) { if (stat(ptr->d_name, &buf) == -1) { my_err("stat", __LINE__); } if (strcmp(ptr->d_name, ".") && strcmp(ptr->d_name, "..")) { if (strcmp(ptr->d_name, filename) == 0) { (*flag)++; strcpy(important, pathname); strcat(important, ptr->d_name); strcat(important, "\n"); send(conn_fd, important, strlen(important), 0); } if (S_ISDIR(buf.st_mode)) { strcpy(dir_list[i++], ptr->d_name); } } } for (j = 0; j < i; j++) { dir_recur(conn_fd, dir_list[j], filename, flag); } //回到上层目录,将其设置为工作目录 chdir(".."); closedir(dir); }