Мне нужна помощь с домашним заданием, которое я сделал, но не было хорошим
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
Тогда найди другого учителя, который будет делать свою работу.