当前位置:  技术问答>linux和unix

如何目录遍历?

    来源: 互联网  发布时间:2015-10-19

    本文导语:  在Linux,如何利用C,实现目录下的文件和子目录的遍历? | #include #include #include #include #include "ourhdr.h" typedef int Myfunc(const char *, const struct stat *, int); /* function type that's called for e...

在Linux,如何利用C,实现目录下的文件和子目录的遍历?

|
#include
#include
#include
#include
#include "ourhdr.h"

typedef int Myfunc(const char *, const struct stat *, int);
/* function type that's called for each filename */

static Myfunc myfunc;
static int myftw(char *, Myfunc *);
static int dopath(Myfunc *);

static long nreg, ndir, nblk, nchr, nfifo, nslink, nsock, ntot;

int
main(int argc, char *argv[])
{
int ret;

if (argc != 2)
err_quit("usage:  ftw  ");

ret = myftw(argv[1], myfunc); /* does it all */

if ( (ntot = nreg + ndir + nblk + nchr + nfifo + nslink + nsock) == 0)
ntot = 1; /* avoid divide by 0; print 0 for all counts */
printf("regular files  = %7ld, %5.2f %%n", nreg,  nreg*100.0/ntot);
printf("directories    = %7ld, %5.2f %%n", ndir,  ndir*100.0/ntot);
printf("block special  = %7ld, %5.2f %%n", nblk,  nblk*100.0/ntot);
printf("char special   = %7ld, %5.2f %%n", nchr,  nchr*100.0/ntot);
printf("FIFOs          = %7ld, %5.2f %%n", nfifo, nfifo*100.0/ntot);
printf("symbolic links = %7ld, %5.2f %%n", nslink,nslink*100.0/ntot);
printf("sockets        = %7ld, %5.2f %%n", nsock, nsock*100.0/ntot);

exit(ret);
}

/*
 * Descend through the hierarchy, starting at "pathname".
 * The caller's func() is called for every file.
 */

#define FTW_F 1 /* file other than directory */
#define FTW_D 2 /* directory */
#define FTW_DNR 3 /* directory that can't be read */
#define FTW_NS 4 /* file that we can't stat */

static char *fullpath; /* contains full pathname for every file */

static int /* we return whatever func() returns */
myftw(char *pathname, Myfunc *func)
{
fullpath = path_alloc(NULL); /* malloc's for PATH_MAX+1 bytes */
/* ({Prog pathalloc}) */
strcpy(fullpath, pathname); /* initialize fullpath */

return(dopath(func));
}
/*
 * Descend through the hierarchy, starting at "fullpath".
 * If "fullpath" is anything other than a directory, we lstat() it,
 * call func(), and return.  For a directory, we call ourself
 * recursively for each name in the directory.
 */
static int /* we return whatever func() returns */
dopath(Myfunc* func)
{
struct stat statbuf;
struct dirent *dirp;
DIR *dp;
int ret;
char *ptr;

if (lstat(fullpath, &statbuf) d_name, ".") == 0  ||
    strcmp(dirp->d_name, "..") == 0)
continue; /* ignore dot and dot-dot */

strcpy(ptr, dirp->d_name); /* append name after slash */

if ( (ret = dopath(func)) != 0) /* recursive */
break; /* time to leave */
}
ptr[-1] = 0; /* erase everything from slash onwards */

if (closedir(dp) st_mode & S_IFMT) {
case S_IFREG: nreg++; break;
case S_IFBLK: nblk++; break;
case S_IFCHR: nchr++; break;
case S_IFIFO: nfifo++; break;
case S_IFLNK: nslink++; break;
case S_IFSOCK: nsock++; break;
case S_IFDIR:
err_dump("for S_IFDIR for %s", pathname);
/* directories should have type = FTW_D */
}
break;

case FTW_D:
ndir++;
break;

case FTW_DNR:
err_ret("can't read directory %s", pathname);
break;

case FTW_NS:
err_ret("stat error for %s", pathname);
break;

default:
err_dump("unknown type %d for pathname %s", type, pathname);
}

return(0);
}

|
#include 
       #include 

       DIR *opendir(const char *name);
       int closedir(DIR *dir);
       struct dirent *readdir(DIR *dir);

|
UNIX环境高级编程源代码

    
 
 

您可能感兴趣的文章:

  • 请问如何遍历目录并拷贝文件?使用bash Shell。
  • php遍历目录输出目录及其下的所有文件示例
  • 高分请教高手!目录定时遍历????
  • PHP遍历目录并返回统计目录大小
  • php遍历目录与其下所有文件
  • 在遍历目录的情况下如果遇到符号连接…………
  • 遍历其文件动态变化的目录
  • Shell programme:怎样遍历整个/目录
  • php无限遍历目录代码
  • 遍历目录脚本运行出错
  • shell遍历目录处理特定目录的脚本代码
  • FreeBSD下如何遍历目录及文件?
  • php无限遍历目录示例
  • Java递归 遍历目录的小例子
  • PHP采用自定义函数实现遍历目录下所有文件的方法
  • 请教各位专家:怎样写makefile遍历整个目录下的文件
  • php 遍历指定路径下所有目录与文件(示例)
  • PHP遍历并打印指定目录下所有文件实例
  • 请问用JAVA如何遍历一个目录下的所有文件?
  • 遍历目录部分代码请教其含义
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python读文件,写文件操作以及目录操作
  • 怎样在linux下用命令实现cp目录a下的子目录的所有内容到b目录中,只cp目录a的子目录内容???
  • Linux下通过rpm安装软件详细介绍以及如何将软件安装到指定目录
  • 怎样在linux下用命令实现cp目录a下的字目录的所有内容到b目录中,cp子目录内容???
  • 怎样用chown改变目录的所属用户和组时,怎样把这个目录下的子目录和所有子目录里的文件的所属用户和组都同时该了啊
  • 写一个shell,把一个目录下所有的子目录中的文件移至本目录中,并且在文件名的前面加上子目录的文件夹名
  • 请问LINUX行命令方式怎么COPY一个目录下所有文件和子目录到另一个目录下
  • 如果计算一个目录下面所有指定类型文件的数目和总大小(包括该目录下所有的子目录)
  • 如何将目录下所有的子目录及文件复制到另一目录下
  • 为什么在我的linux7.0中,/usr/src/目录下只有redhat目录而没有linux目录?
  • 我的sun5.8工作站下目录下空间不够,其他目录还有空间,怎么把其他目录下的空间分配过来?
  • 源代码分布在几个不同的目录中,如何在 Makefile 文件中,给出相应的目录??我不知道怎么将目录加进去!55555
  • 大家知道在shell那里删除一个里面有内容的目录应该要用什么命令呢?注意,是有内容内目录啊,不是空目录!
  • 请问,一个目录(my_dir)下有很多子目录,每个子目录下有大量的文件,想删除my_dir,最好的方法是什么?谢谢
  • 一个空的目录260g,里面有10个20g左右的子目录。如何删除该目录呢?
  • Solaris tar命令求教:如何在压缩一个目录的时候排除该目录下的某个子目录?
  • java里怎么怎样可以将这个目录和目录内的所有文件以及子目录一次全删掉阿
  • [参与者均有分] 如何在压缩一个目录的时候排除该目录下的某些深层子目录?
  • 如何将一个目录下的所有文件及子目录都copy到目的目录下???
  • 只给一个目录路径,怎样再在其下建立一个新的目录(给定目录名),然后再在其下建立一个新的文件(给定文件名)?
  • 有什么简便的可以删除目录下及其各级子目录下所有文件,但保留目录结构的方法么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3