我希望用ftw遍历我的一个目录,以下是非常简单的一段代码:
#include
1<sys stat.h="">
2#include <unistd.h>
3#include <ftw.h>
4#define MAXFILENUM 150000
5int count=0;
6
7
8void historyCount()
9{
10count++;
11}
12
13int historyFn(const char * file, const struct stat *sb, int flag)
14{
15if(flag==FTW_F)
16{
17historyCount();
18// printf("%s\n",file);
19}
20return 0;
21
22}
23
24void main(int argc,char **argv){
25ftw("/forest/DataBase",historyFn,MAXFILENUM);
26printf("文件总数为:%d\n",count);
27}
28
29执行结果为:文件总数为:2171
30使用konqueror查看的结果是71,031 个文件
31明显,返回的时候返回的文件个数明显小于真实的文件数目。
32去掉注释行,可以看到目录遍历总是中止于某个固定的文件那儿。但是我定义的MAXFILENUM远远大于真实的文件总数
33
34所以,我不是很清楚问题究竟出在什么地方?
35请问:
361:如果是因为在linux里面定义了ftw最大的遍历数,而且这个数目比我定义的MAXFILENUM要小,那么这个linux下面的定义在哪里?还有,我试过把MAXFILENUM改成5000000等等,程序会报错,类型是Segmentation Fault。
372:使用du遍历的时候,无论系统有多少文件,都是可以遍历的,所以请问du的原理是怎样的?我也很想查看一下du的源码,但是不知道du的源码应该从哪里下载?我一直很想知道如果我想看ls、du等的源码,应该怎样从网上去查找?
383:我很想通过rpm的方式找到du所在rpm包,但是不是很清楚如何定位du在那个rpm包里面?
394:如果我放弃使用ftw,而改用opendir和readdir,是否同样会遇到无法完全遍历的问题?
40
41在线等候
42
43\---------------------------------------------------------------
44
45这个东西在 fileutils 里面,
46去 ftp.gnu.org 去下载
47
48\---------------------------------------------------------------
49
50rpm -qf /bin/du
51使用rpm的qf参数能够查到某个文件属于哪个rpm包,然后再到rpmfind.net中找sc.rpm源码!</ftw.h></unistd.h></sys>