加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c库函数 nftw详解

(2009-12-17 10:38:03)
标签:

nftw

it

分类: C

nftw遍历目录树


表头文件:#include  <ftw.h>
定义函数:int nftw(const char *dir, int  (*fn)(const char *file, const struct stat *sb, int flag, struct FTW *s),
               depth, int  flags)
函数说明:nftw()与ftw()很像,都是从参数dir指定的目录开始, 往下一层层地递归遍历子目录。 每进入一个目录,便会调用参数*fn定义的函数来处理。nftw()会传四个参数给fn(). 第一个参数*file指向当时所在的目录路径,第二个参数是*sb, 为stat结构指针(结构定义请参考stat()),第三个参数为旗标,有底下几种可能值:
FTW_F                         一般文件
FTW_D                         目录
FTW_DNR                      不可读取的目录。此目录以下将不被遍历
FTW_SL                         符号连接
FTW_NS                        无法取得stat结构数据,在可能是权限问题
FTW_DP                        目录,而且子目录都已被遍历过了
FTW_SLN                       符号连接,但连接不存在的文件

fn()的第四个参数是FTW结构,定义如下:

struct  FTW
{
     int  base;
     int  level; //level代表遍历时的深度
}

nftw()第三个参数depth代表nftw()在进行遍历目录时可同时打开的文件数。
ftw()在遍历时每一层目录至少需要一个文件描述词,如果遍历时用完了depth所给予的限制数目,整个遍历将因不断地关文件和开文件操作而显得的缓慢

nftw()最后一个参数flags用来指定遍历时的动作,可指定下列的操作或用OR组合
FTW_CHDIR                 在读目录之前先用chdir()移到此目录
FTW_DEPTH                执行深度优先搜索。在遍历此目录前先将所有子目录遍历完
FTW_MOUNT               遍历时不要跨越到其他文件系统
FTW_PHYS                  不要遍历符号连接的目录。预设会遍历符号连接目录

如果要结束nftw()的遍历,fn()只需返回一非0值即可,此值同时也会是nftw()的返回值。否则nftw()会试着遍历完所有目录,然后返回0

返 回 值 :遍历中断则返回fn()函数的返回值, 全部遍历完则返回0,若有错误发生则返回-1

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有