Consider a hierarchical filesystem consisting of directories
Solution
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>
#include<sys/stat.h>
#include<unistd.h>
void countEntries(char *dirname, int *nDirs, int *nFiles);
main(int argc,char **argv)
{
int nDirs, nFiles;
char a[100];
strcpy(a, \"/home/usr/\");// in 2 argument provide your directory path
if(argc == 2){
strcat(a, argv[1]);
}
else {
printf(\"Usage : ./a.out dirname\ \");
return ;
}
countEntries(a, &nDirs, &nFiles);
printf(\"nDirs = %d, nFiles=%d\ \", nDirs, nFiles);
}
void countEntries(char *dirname, int *nDirs, int *nFiles)
{
DIR *dp; char b[400];
static int D=0, F=0;
struct dirent *d,*d1;
struct stat s,s1;
dp=opendir(dirname);
while(d=readdir(dp)) {
if(d->d_name[0]!=\'.\')
{
strcpy(b,dirname);
strcat(b,\"/\");
strcat(b,d->d_name);
stat(b,&s1);
if(S_ISDIR(s1.st_mode))
{
D++;
countEntries(b, nDirs, nFiles);
}
else
{
F++;
}
}
}
*nDirs = D;
*nFiles = F;
}

