static void display_file(char **tab, char *option) { int j; j = 0; while (tab[j]) { if ((IS_A_2 && !is_main(tab[j])) || IS_A || IS_F) { ft_putstr_name(tab[j++]); if (IS_P && is_file_or_dir(tab[j - 1]) == 2) ft_putchar('/'); ft_putchar('\n'); } else if (!(is_hidden(tab[j]))) { ft_putstr_name(tab[j++]); if (IS_P && is_file_or_dir(tab[j - 1]) == 2) ft_putchar('/'); ft_putchar('\n'); } else ++j; } }
bool get_all_files(char *dir_path, list_t *list) { check(dir_path != NULL, "dir_path is NULL."); check(list != NULL, "list is NULL."); check(is_file_or_dir(dir_path) == 2, "dir_path '%s' is not a directory.", dir_path); DIR *dir; struct dirent *ent; check((dir = opendir(dir_path)) != NULL, "could not open directory: %s", dir_path); while((ent = readdir(dir)) != NULL) { char fullpath[256]; sprintf(fullpath, "%s/%s", dir_path, ent->d_name); if(ent->d_type == DT_REG) { check(dl_insert(list, fullpath) == 1, "failed to insert %s into the list", fullpath); } else if (ent->d_type == DT_DIR && strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { get_all_files(fullpath, list); } } closedir(dir); return 1; error: if(dir != NULL) { closedir(dir); } return 0; }
/** 删除文件*/ sfpr_int_t sfpr_file_remove(const char *path) { if(is_file_or_dir(path) == 1) { if(DeleteFile(path)) return 0; else return -1; } else return -1; }
sfpr_int_t sfpr_dir_remove(const char *path) { if(is_file_or_dir(path) == 0) { if(RemoveDirectory(path)) return 0; else return -1; } else return -1; }
int main(int argc, char *argv[]) { char *input = argv[1]; char *verify_number = argv[2]; int number = atoi(argv[2]); char *output = argv[3]; // validate inputs. Store the result // of the file check for later use list_t *wordlist = NULL; check(argc == 4, "Invalid number of arguments:\n%s", usages); int result = is_file_or_dir(input); check(result != 0, "File/Dir '%s' does not exist or is not readable.\n%s", input, usages); check(is_file_or_dir(output) == 0, "File '%s' already exists.\n%s", output, usages); if(number == 0 && strlen(verify_number) == 1) { check(isdigit(verify_number[0]) != 0 && number >=0, "%s is not a valid number.\n%s", verify_number, usages); } wordlist = dl_init(); // begin branching logic to gather file names // for processing if(result == 2) { // if result == 2, it's a directory get_words_from_files(wordlist, input); print_words_to_file_and_screen(wordlist, number, output); } else if(result == 1) { // if result == 2, it's a file read_file_word_by_word(input, wordlist); print_words_to_file_and_screen(wordlist, number, output); } dl_clear_destroy(wordlist); return 0; error: if(wordlist != NULL) { dl_clear_destroy(wordlist); } return 1; }
int is_only_option(char **av) { int j; int arg; int big_option; j = 0; arg = 0; big_option = 0; while (av[j]) { if (ft_strcmp(av[j], "--") == 0 && big_option < 1) ++big_option; else if (av[j][0] == '-' && is_file_or_dir(av[j])) ++arg; else if (av[j][0] != '-') ++arg; ++j; } return (arg == 0) ? 1 : 0; }
static void disp_all(char *file, t_stat *buf, t_max *max, char *option) { disp_permit(buf->st_mode); disp_xattr(file); disp_link(buf, max->max_lnk); if (!(IS_G)) disp_owner(owner_name(buf->st_uid), max->max_user); if (!(IS_O)) disp_group(group_name(buf->st_gid), max->max_group); if (IS_O && IS_G) write(1, " ", 2); disp_size(buf, max->max_size, max->is_b_c_file); ft_putstr(s_time(buf)); write(1, " ", 1); (is_lnk(file)) ? disp_lnk_name(file) : 0; if (!(is_lnk(file))) ft_putstr_name(file); if (IS_P && is_file_or_dir(file) == 2) write(1, "/", 1); if (!(is_lnk(file))) write(1, "\n", 1); }
int main(int argc, char *argv[]){ char *input = argv[1]; char *verify_procnumber = argv[2]; char *verify_printnumber = argv[3]; char *output = argv[4]; list_t *list = NULL; check(argc == 5, "Invalid number of arguments: %d\n%s", argc, usages); int input_check_result = is_file_or_dir(input); check(input_check_result != 0 && input_check_result != 2, "File/Dir '%s' does not exist or is not a file.\n%s", input, usages); check(is_file_or_dir(output) == 0, "File '%s' already exists.\n%s", output, usages); check(verify_input_is_valid_digit(verify_procnumber) == 1, "PROCNUMBER is not a valid number."); check(verify_input_is_valid_digit(verify_printnumber) == 1, "PRINTNUMBER is not a valid number."); // begin branching logic to gather file names // for processing stat_obj size_test; stat(input, &size_test); int proc_number = atoi(verify_procnumber); int print_number = atoi(verify_printnumber); int size = size_test.st_size; list = dl_init(); pthread_mutex_init(&mutex, NULL); pthread_cond_init(&m_cond, NULL); FILE *fp = NULL; int child_read_size = 0; int child_segment_size = 0; if(proc_number == 0){ child_read_size = size; } else { child_read_size = size / proc_number; } int actual_offset = 0; if(input_check_result == 1 && proc_number > 0){ readargs *all_readargs[proc_number]; pthread_t thread_ids[proc_number]; int i = 0; for(i = 0; i < proc_number; i++){ all_readargs[i] = calloc(1, sizeof(readargs)); all_readargs[i]->fp = fopen(input, "rb"); all_readargs[i]->list = list; all_readargs[i]->thread_num = i; child_segment_size += child_read_size; if((size - child_segment_size) < child_read_size){ int excess_bytes = size - child_segment_size; child_read_size += excess_bytes; } all_readargs[i]->actual_offset = child_segment_size - child_read_size; all_readargs[i]->child_read_size = child_read_size; all_readargs[i]->size = size; } for(i = 0; i < proc_number; i++){ pthread_create(&thread_ids[i], NULL, execute_read, (void*)all_readargs[i]); } for(i = 0; i < proc_number; i++){ pthread_join(thread_ids[i], NULL); } for(i = 0; i < proc_number; i++){ fclose(all_readargs[i]->fp); } check(print_words_to_file_and_screen(list, print_number, output) == 1, "print to '%s' failed", output); dl_clear_destroy(list); for(i = 0; i < proc_number; i++){ free(all_readargs[i]); } } else if (input_check_result == 1) { fp = fopen(input, "r"); check(read_file_word_by_word(fp, list, actual_offset, child_read_size, size) == 1, "Could not read file for single parent thread."); check(print_words_to_file_and_screen(list, print_number, output) == 1, "printing to '%s' failed", output); dl_clear_destroy(list); } return 0; error: if(list != NULL){ dl_clear_destroy(list); } return 1; }