linux系统编程----统计一个目录下的普通文件个数

Posted 流年十维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统编程----统计一个目录下的普通文件个数相关的知识,希望对你有一定的参考价值。

主要是为了统计linux系统下一个指定目录下面的普通文件个数,运用目录操作的一些函数,配合递归调用来实现该功能。

首先介绍一下函数原型:

  打开一个空目录
                    DIR *opendir(const char *name);
                    参数: 目录名
                    返回值: 指向目录的指针
        读目录
                    struct dirent *readdir(DIR *dirp);
                    参数: opendir的返回值
                    返回值: 指向目录的指针

   关闭目录
                    int closedir(DIR *dirp);

代码实现:readfileNum.c

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <dirent.h>
 5 #include <sys/types.h>
 6 
 7 
 8 int get_file_num(char* root)
 9 {
10     int total = 0;
11     DIR* dir = NULL;
12     // 打开目录
13     dir = opendir(root);
14     // 循环从目录中读文件
15 
16     char path[1024];
17     // 定义记录目录指针
18     struct dirent* ptr = NULL;
19     while( (ptr = readdir(dir)) != NULL)
20     {
21         // 跳过. 和 ..
22         if(strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
23         {
24             continue;
25         }
26         // 判断是不是目录
27         if(ptr->d_type == DT_DIR)
28         {
29             sprintf(path, "%s/%s", root, ptr->d_name);
30             // 递归读目录
31             total += get_file_num(path);
32         }
33         // 如果是普通文件
34         if(ptr->d_type == DT_REG)
35         {
36             total ++;
37         }
38     }
39     closedir(dir);
40     return total;
41 }
42 
43 int main(int argc, char* argv[])
44 {
45     if(argc < 2)
46     {
47         printf("./a.out path");
48         exit(1);
49     }
50 
51     int total = get_file_num(argv[1]);
52     printf("%s has regfile number: %d\\n", argv[1], total);
53     return 0;
54 }

效果展示:

 

以上是关于linux系统编程----统计一个目录下的普通文件个数的主要内容,如果未能解决你的问题,请参考以下文章

linux怎么查看一个目录下的文件数量

Linux C语言编程题:将主目录下的所有普通文件复制到/tmp目录。

在Linux系统下统计当前文件夹下的文件个数目录个数

Linux系统编程---进程I/O

linux下如何统计一个目录下的文件个数以及代码总行数的命令

Linux系统目录结构