Задачка:написать программу, находящую в заданном каталоге и всех его подкаталагах все файлы заданного размера. Имя каталога задается пользователем в качестве третьего аргумента командной строки. Диапазон (мин мах) размеров файлов задается пользователем в качестве первого и второго аргумента командной строки. Программа выводит результат поиска в файл(четвертый аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводиться сообщения числа просмотренных файлов.
Проверьте пожалуйста код?
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <ftw.h>
#include <sys/stat.h>
#include <time.h>
#include <stdint.h>
int minsize;
int maxsize;
FILE *out = NULL;
int i=0;
void find(char const *dirname,int minsize,int maxsize,FILE *out);
{
DIR *dr=opendir (const char *dirname);
if (dr==NULL)
{
fprintf(stderr,"Невозможно открыть директорию \"%s\"",dirname);
fclose(out);
errno = ENOENT;
perror(", ");
return -1; exit(1);
}
struct dirent *dt;
while((dt=readdir(dr)))
{
if(dt->d_type=DT_DIR) {find();}
if(dt->d_type=DT_REG)
{
if(((dt->st_size)>minsize) $$ ((dt->st_size)<maxsize)))
{
fprintf(out,"%-40s %-10jd %s\n",filename, (intmax_t) dt->st_size);
i=i+1;
}
}
}
return 0;
}
int main (int argc,char* argv[])
{
if (argc != 5)
{
fprintf(stderr,"Не все параметры заданы\n");
errno = EINVAL; //invalid arguments
perror(argv[0]);
printf("формат: нач_размер кон_размер папка имя_файла\n");
return -1;
}
out = fopen (argv[4],"w+");
if ( out == NULL)
{
printf("NULL\n");
fprintf(stderr,"Ошибка создания файла \"%s\"",argv[4]);
perror(", ");
return -1;
}
DIR *dr = opendir(argv[3]);
if (dr == NULL)
{
fprintf(stderr,"Невозможно открыть директорию \"%s\"",argv[3]);
fclose(out);
errno = ENOENT;// no such file or directory
perror(", ");
return -1;
}
minsize = atol(argv[1]);
maxsize = atol(argv[2]);
dirname = argv[3]
find(*dirname,minsize, maxsize, FILE *out);
printf ("Число просмотренных файлов равно %d\n", i);
closedir(dr);
fclose(out);
return 0;
}