使用ftw遍历时的一个问题,以及du的源码从何处下载?

我希望用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>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus