Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2035200
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2009-02-21 20:34:33

相关函数:opendir
表头文件:#include
定义函数:int  ftw( const char *dir,

                           int (*fn) (const *file, const struct stat *st, int flag),

                           int depth)
函数说明:ftw() 会从参数dir指定的目录开始,往下一层层地递归式遍历子目录。

             ftw()会传三个参数给fn(),

              第一个参数(*file):    指向当时所在的目录路径,

              第二个参数(*st):     stat结构指针,

              第三个参数(flag):     为旗标,有下面几种可能值
                                         FTW_F        
一般文件
                                         FTW_D       
目录
                                         FTW_
DNR     不可读取的目录,此目录以下将不被遍历
                                         FTW_SL         
符号连接
                                         FTW_NS      
无法取得stat结构数据,有可能是权限问题
                 
最后一个参数depth代表ftw()在进行遍历目录时同时打开的文件数。ftw()

遍历时每一层目录至少需要一个文件描述词,如果遍历时用完了depth所给予的

限制数目,整个遍历将因不断地关文件和开文件操作而显得缓慢
               
如果要结束ftw()的遍历,fn()只需返回一非零值即可,此值同时也会是ftw()

返回值。否则ftw()会试着走完所有的目录,然后返回0

  值:  遍历中断则返回fn()函数的返回值,全部遍历则返回0,若有错误发生则返回-1
附加说明:   由于ftw()会动态配置内存使用,请使用正常方式(action函数返回非零值)来

中断遍历,不要在action 函数中使用longjmp()

代码示例

/*

 * dir_it.cc

 *

 *  Created on: Feb 21, 2009

 *      Author: Feng.i.Liu

 *    Compile : gcc dir_it -o dir_it.cc

 */

#include

#include

#include

#include

 

int action (const char * filename, const struct stat *st, int flag){

  if( flag == FTW_D ){

     printf("ct mkelem -nc -eltype directory %s\n", filename);

     printf("cd %s\n", filename);

  }else{

     printf("ct mkelem -nc -eltype cplusplus_source %s\n", filename);

  }

  return 0;

}

 

int main(int argc, char ** argv){

   ftw(argv[1], &action, 500);

}

阅读(1692) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~