Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;
}
Beispiel #3
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}
Beispiel #7
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);
}
Beispiel #8
0
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;
}