LinuxForum.Fans
Тема

Помогите разобраться с программкой

Автор: eu8cc 4 сообщений 1758 просмотров
#47607

написать программу, находящую в заданном каталоге и всех его подкаталагах все файлы заданного размера. Имя каталога задается пользователем в качестве третьего аргумента командной строки. Диапазон (мин мах) размеров файлов задается пользователем в качестве первого и второго аргумента командной строки. Программа выводит результат поиска в файл(четвертый аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводиться сообщения числа просмотренных файлов.
на линуксе

#47608

eu8cc,
Найдите в данной теме программу удаления файлов в заданном каталоге и подправьте ее на предмет не стирания, а нахождения

#47625

пока дошел до этого, как дальше

text

#include <dirent.h> #include <errno.h> #include <stdio.h> #include <ftw.h> #include <sys/stat.h> #include <time.h> #include <stdint.h>

size_t s1,s2; //размер файлов в диапазоне s1 <= x <= s2 FILE *f = NULL; time_t to_sec(char *date);

int main (int argc,char* argv[]) { if (argc != 5) { fprintf(stderr,"Не все параметры заданы\n"); errno = EINVAL; //invalid arguments perror(argv[0]); printf("формат: нач_размер кон_размер папка имя_файла\n"); return -1; } f = fopen (argv[4],"w+"); if ( f == NULL) { printf("NULL\n"); fprintf(stderr,"Ошибка создания файла \"%s\"",argv[4]); perror(", "); return -1; } */ DIR *dr = opendir(argv[3]); if (dr == NULL) { fprintf(stderr,"Невозможно открыть директорию \"%s\"",argv[1]); fclose(f); errno = ENOENT;// no such file or directory perror(", "); return -1; } s1 = atol(argv[1]); s2 = atol(argv[2]); ftw(argv[3],tree,0); //обход дерева closedir(dr); fclose(f); return 0; }

tree функция обработки которую не знаю как написать

#47953

Может имеет смысл глянуть man по ftw?
В функцию tree будут передаваться путь к файлу/подкаталогу, структура со всякой интересной инфой и тип. Алгоритм представляется такой: если тип - FTW_F (тупо файл), то проверяем его размер (sb->off_t, видимо) и, если размер нужный, пишем в файл его путь и прочие нужные аттрибуты. Если тип - FTW_D, т.е. попалась директория, то запускаем на ней точно такой же ftw.

Войдите или зарегистрируйтесь, чтобы ответить.