Цитата(Litkevich Yuriy @ 31.5.2010, 17:52)
дык, а скомпилить и проверить?
не могу у меня линукс стоит, но криво
подправил но согласно начальному условию нужно пройти все вложенные каталоги и подкаталоги, интересно это сможет сделать программка?
#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;
static int tree (const char *filename, const struct stat *status, int flag)
if (flag == FTW_F && status->st_size >= s1 && status->st_size <= s2)
{
fprintf(f,"%-40s %-10jd %s\n",filename, (intmax_t) status->st_size);//пишем в файл
}
return 0; //возвращаем 0, чтобы продолжить обход дерева,иначе обход прерывается
}
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]);
nftw(argv[3],tree,0, FTW_DEPTH || FTW_PHYS); //обход дерева
closedir(dr);
fclose(f);
return 0;
}