#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fun();
int main(int argc, char *argv[])
{
int num;
num = fun();
printf("total:%d\n", num);
return 0;
}
int fun(void)
{
DIR *dp;
int n, flag = 0; //flag = 1 有目录 0没有目录
static int count = 0;
char dir_path_buf[1024];
struct dirent *rdp;
struct stat dbuf;
dp = opendir(".");
if(dp == NULL){
perror("opendir error");
exit(1);
}
while( (rdp = readdir(dp)) != NULL){
if(strcmp(rdp->d_name, ".") == 0 || strcmp(rdp->d_name, "..") == 0){
continue;
}
n = stat(rdp->d_name, &dbuf);
if(n == -1){
perror("stat error:\n");
exit(1);
}
if(dbuf.st_mode & S_IFDIR){
printf("dir:%s\n", rdp->d_name);
sprintf(dir_path_buf, "./%s", rdp->d_name);
// printf("%s\n", dir_path_buf);
chdir(dir_path_buf);
flag = 1;
// printf("dir:%s", rdp->d_name);
fun();
if(flag == 1 ){
chdir("..");
}
}else{
printf("%s\n", rdp->d_name);
count++;
}
}
// printf("t:%d\n", count);
return count;
}