当前位置: 技术问答>linux和unix
使用ftw遍历时的一个问题,以及du的源码从何处下载?
来源: 互联网 发布时间:2015-07-20
本文导语: 我希望用ftw遍历我的一个目录,以下是非常简单的一段代码: #include #include #include #define MAXFILENUM 150000 int count=0; void historyCount() { count++; } int historyFn(const char * file, const struct stat *sb, int fla...
我希望用ftw遍历我的一个目录,以下是非常简单的一段代码:
#include
#include
#include
#define MAXFILENUM 150000
int count=0;
void historyCount()
{
count++;
}
int historyFn(const char * file, const struct stat *sb, int flag)
{
if(flag==FTW_F)
{
historyCount();
// printf("%sn",file);
}
return 0;
}
void main(int argc,char **argv){
ftw("/forest/DataBase",historyFn,MAXFILENUM);
printf("文件总数为:%dn",count);
}
执行结果为:文件总数为:2171
使用konqueror查看的结果是71,031 个文件
明显,返回的时候返回的文件个数明显小于真实的文件数目。
去掉注释行,可以看到目录遍历总是中止于某个固定的文件那儿。但是我定义的MAXFILENUM远远大于真实的文件总数
所以,我不是很清楚问题究竟出在什么地方?
请问:
1:如果是因为在linux里面定义了ftw最大的遍历数,而且这个数目比我定义的MAXFILENUM要小,那么这个linux下面的定义在哪里?还有,我试过把MAXFILENUM改成5000000等等,程序会报错,类型是Segmentation Fault。
2:使用du遍历的时候,无论系统有多少文件,都是可以遍历的,所以请问du的原理是怎样的?我也很想查看一下du的源码,但是不知道du的源码应该从哪里下载?我一直很想知道如果我想看ls、du等的源码,应该怎样从网上去查找?
3:我很想通过rpm的方式找到du所在rpm包,但是不是很清楚如何定位du在那个rpm包里面?
4:如果我放弃使用ftw,而改用opendir和readdir,是否同样会遇到无法完全遍历的问题?
在线等候
#include
#include
#include
#define MAXFILENUM 150000
int count=0;
void historyCount()
{
count++;
}
int historyFn(const char * file, const struct stat *sb, int flag)
{
if(flag==FTW_F)
{
historyCount();
// printf("%sn",file);
}
return 0;
}
void main(int argc,char **argv){
ftw("/forest/DataBase",historyFn,MAXFILENUM);
printf("文件总数为:%dn",count);
}
执行结果为:文件总数为:2171
使用konqueror查看的结果是71,031 个文件
明显,返回的时候返回的文件个数明显小于真实的文件数目。
去掉注释行,可以看到目录遍历总是中止于某个固定的文件那儿。但是我定义的MAXFILENUM远远大于真实的文件总数
所以,我不是很清楚问题究竟出在什么地方?
请问:
1:如果是因为在linux里面定义了ftw最大的遍历数,而且这个数目比我定义的MAXFILENUM要小,那么这个linux下面的定义在哪里?还有,我试过把MAXFILENUM改成5000000等等,程序会报错,类型是Segmentation Fault。
2:使用du遍历的时候,无论系统有多少文件,都是可以遍历的,所以请问du的原理是怎样的?我也很想查看一下du的源码,但是不知道du的源码应该从哪里下载?我一直很想知道如果我想看ls、du等的源码,应该怎样从网上去查找?
3:我很想通过rpm的方式找到du所在rpm包,但是不是很清楚如何定位du在那个rpm包里面?
4:如果我放弃使用ftw,而改用opendir和readdir,是否同样会遇到无法完全遍历的问题?
在线等候
|
rpm -qf /bin/du
使用rpm的qf参数能够查到某个文件属于哪个rpm包,然后再到rpmfind.net中找sc.rpm源码!
使用rpm的qf参数能够查到某个文件属于哪个rpm包,然后再到rpmfind.net中找sc.rpm源码!
|
这个东西在 fileutils 里面,
去 ftp.gnu.org 去下载
去 ftp.gnu.org 去下载