Member 12914598 Ответов: 1

Мне нужна помощь с домашним заданием, которое я сделал, но не было хорошим


Write a C program that works as follows:

a) syntax: $./count <folder> <depth>

b) program will parse (recursively) to the folder <folder> up to a depth of <depth> levels, and count how many regular files and how many directories exist in that folder. Example: if <folder> is "/" and <depth> is 2, program will parse folder /a/b/* but it will not parse subfolders of /a/b (e.g. /a/b/c/ will NOT be parsed).

c) program should use at least 2 child processes to handle the parsing of subfolders (e.g. if parsing /a/b1 and /a/b2, one child would parse /a/b1 and the other /a/b2).

d) program should output total number of folders and regular files found, e.g. "Found 2 folders and 14 regular files in total."

Hint: use pipes to communicate between processes and opendir()/readdir()/closedir().


Может ли кто-нибудь помочь и объяснить мне это

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <dirent.h>


void direct(char*d,int e, int*f ,int*g){
	*f=0;*g=0;	
	if(e<0)
		return;
	
	DIR*director;
	if((director=opendir(d))==NULL){
		printf("Error file");
		exit(0);
	}


	int fi=0,fo=0;

	struct dirent*tip;	
	while((tip=readdir(director))!=NULL){
		if(tip->d_type!=DT_DIR)
			fi++;
		else{
			if((strcmp(tip->d_name,".")!=0)&&(strcmp(tip->d_name,"..")!=0)){

			int fis,dir;
			char*castravete=(char*)malloc(sizeof(char)*(strlen(d)+strlen(tip->d_name)+1));
			strcpy(castravete,d);
			castravete[strlen(d)]='/';
			strcpy(castravete+strlen(d)+1,tip->d_name);
			direct(castravete,e-1,&fi,&dir);
			fi+=fis;
			fo+=dir+1;
			free(castravete);

			}

		}

	}

	*f=fi;
	*g=fo;
}


int main(int a,char*b[])
{
	if (a<3)
		exit(0);
	
	int c=0,i;


	for(i=0;i<strlen(b[2]);i++)
		c=c+b[2][i]-'0';
	int x;
	int z;
	direct(b[1],c,&x,&z);
	printf("Folder:%d;Fiser:%d;\n",z,x);
	return 0;

}

NotPolitcallyCorrect

Если вы не понимаете свою домашнюю работу, лучше всего спросить об этом у вашего учителя. Это их работа-учить тебя.

Member 12914598

Вы правы но у него нет галстука чтобы отвечать на письма

Member 12914598

Так у тебя есть время, чтобы помочь мне ?

jeron1

Возможно, вы могли бы обсудить, что делает ваша программа в сравнении с тем, что, по вашему мнению, она должна делать. Вы говорите:" было нехорошо", это довольно расплывчато. Что именно в нем было нехорошего? - чем больше подробностей вы можете дать, тем лучше.

Member 12914598

Он сказал, что мне нужно переделать его лучше , я не знаю , как использовать трубы, и мой код неэффективен

jeron1

Если вы не знаете, как использовать трубы, исследуйте это, например,
6.2.2 создание труб в C[^]

NotPolitcallyCorrect

Нет. У меня есть своя работа, и я не пытаюсь учить кого-то программированию через интернет.

NotPolitcallyCorrect

Тогда найди другого учителя, который будет делать свою работу.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Может кто-нибудь, пожалуйста, помочь и объяснить мне это

Помогите себе с отладчиком, посмотрите, как выполняется ваш код, и сравните с тем, что он должен делать, это должно помочь вам понять, что не так.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.