Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 22:43   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение SUSE . поиск исполняемых файлов

Написать программу, находящую в заданном каталоге и всех его подкаталогах все исполняемые файлы. Диапазон (мин. мах.) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки. Имя каталога задаётся пользователем в качестве третьего аргумента командной строки. Программа выводит результаты поиска в файл (четвертый аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводится общее число просмотренных файлов. Процедура поиска для каждого подкаталога должна запускаться в отдельном процессе. Каждый процесс выводит на экран свой pid, полный путь, имя и размер просмотренного файла, общее число просмотренных файлов в подкаталоге. Число запущенных процессов в любой момент времени не должно превышать N (вводится пользователем). Проверить работу программы для каталога /usr/ размер 31000 31500 N=6..

Вроде все ищет и во все подкаталоги залазит, но в конце, после вывода рузультата, появляется сообщение "ошибка сигментирования". Чо не так?

Код:
char s1[255];
char s2[255];
char s4[255];
int z=0;

void *func_thread(void *param)
{
DIR *dp,*pdp;
struct dirent *d;
struct stat file;
int x=0;
dp=opendir((char*)param);
while(d=readdir(dp))
{
char path[255];
strcpy(path,(char*)param);
strcat(path,"/");
strcat(path,d->d_name);
stat(path,&file);
pdp=opendir(path);
if(pdp!=0) { if((strcmp(d->d_name,"..")!=0) && (strcmp(d->d_name,".")!=0)) func_thread(path);}

if((!pdp)&&(file.st_size>atoi(s1))&&(file.st_size<atoi(s2))&&(((file.st_mode&S_IXUSR)!=0)))
{
printf("%u %s %s %d\n",pthread_self(),(char*)param,d->d_name, (int)file.st_size);
FILE *fp;
fp=fopen(s4,"a");
fprintf(fp,"%s %s %d ",(char*)param,d->d_name,(int)file.st_size);
if((file.st_mode & S_IRUSR)!=0) fprintf(fp,"r"); else fprintf(fp,"-");
if((file.st_mode & S_IWUSR)!=0) fprintf(fp,"w"); else fprintf(fp,"-");
if((file.st_mode & S_IXUSR)!=0) fprintf(fp,"x"); else fprintf(fp,"-");

if((file.st_mode & S_IRGRP)!=0) fprintf(fp,"r"); else fprintf(fp,"-");
if((file.st_mode & S_IWGRP)!=0) fprintf(fp,"w"); else fprintf(fp,"-");
if((file.st_mode & S_IXGRP)!=0) fprintf(fp,"x"); else fprintf(fp,"-");

if((file.st_mode & S_IROTH)!=0) fprintf(fp,"r"); else fprintf(fp,"-");
if((file.st_mode & S_IWOTH)!=0) fprintf(fp,"w"); else fprintf(fp,"-");
if((file.st_mode & S_IXOTH)!=0) fprintf(fp,"x"); else fprintf(fp,"-");
fprintf(fp,"\n");
fclose(fp);
x++; 
}
}
z--;
}




int main(int argc, char **argv) {
	FILE *fp;
	fp=fopen(argv[4],"w");
	fclose(fp);
	strcpy(s1,argv[1]);
	strcpy(s2,argv[2]);
	strcpy(s4,argv[4]);
	int N;
	pthread_t threads[255];
	printf("ENTER MAX THREADS: ");
	scanf("%d",&N);
	char files[255][255];
	int count=0;
	DIR *dp,*pdp;
	struct dirent *d;
	struct stat file;
	dp=opendir(argv[3]);
	while(d=readdir(dp)) {
		char path[255];
		strcpy(path,argv[3]);
		strcat(path,"/");
		strcat(path,d->d_name);
		pdp=opendir(path);
		if((pdp) && (strcmp(d->d_name,"..")==1)) {
			strcpy(files[count],path);
			count++;
		}
	}
	int i;
	for(i=0;i<N;i++) {
		pthread_create(&threads[i],NULL,func_thread,(void*)files[i]);
		z++;
	}
	for(i=N;i<count;i++) {
		while(z==N) {}
		pthread_create(&threads[i],NULL,func_thread,(void*)files[i]);
		z++;
	}
	pthread_create(&threads[i+1],NULL,func_thread,(void*)argv[3]);
	pthread_join(threads[i+1]);

	return 0;
}
zhenya.ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование под SUSE WESTnik Qt и кроссплатформенное программирование С/С++ 4 03.04.2011 20:35
Упаковщики исполняемых файлов Blade Софт 9 06.09.2010 00:00
Запуск исполняемых файлов из программы Dryg2009 Общие вопросы Delphi 7 15.04.2009 07:50
Поиск файлов student_63 Общие вопросы Delphi 6 07.03.2008 19:00
сжатие исполняемых файлов SuperVisor Софт 8 26.03.2007 21:40