免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 913 | 回复: 0
打印 上一主题 下一主题

Linux下遍历目录程序示例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-03 14:54 |只看该作者 |倒序浏览

我们将要实现的是要得到一个子目录清单的程序,现在把许多文件处理函数集中在一起使用,程序遍历指定目录的文件,同时也要进到下级子目录中进行遍
历,这一点是将子目录递归传递到opendir中去,需要指出的是,这就决定了如果子目录嵌套过深,程序将失败返回,因为允许打开的子目录流数量是有上限
的。
    源码如下:


/**//*  We start with the appropriate headers and then a function, printdir,

    which prints out the current directory.

    It will recurse for subdirectories, using the depth parameter is used for indentation.  */


#include unistd.h>

#include stdio.h>

#include dirent.h>

#include string.h>

#include sys/stat.h>


void printdir(char *dir, int depth)



{

    DIR *dp;

    struct dirent *entry;

    struct stat statbuf;



    if((dp = opendir(dir)) == NULL)

{

        fprintf(stderr,"cannot open directory: %s\n", dir);

        return;

    }

    chdir(dir);


    while((entry = readdir(dp)) != NULL)

{

        lstat(entry->d_name,&statbuf);


        if(S_ISDIR(statbuf.st_mode))

{


            /**//* Found a directory, but ignore . and .. */

            if(strcmp(".",entry->d_name) == 0 ||

                strcmp("..",entry->d_name) == 0)

                continue;

            printf("%*s%s/\n",depth,"",entry->d_name);


            /**//* Recurse at a new indent level */

            printdir(entry->d_name,depth+4);

        }

        else printf("%*s%s\n",depth,"",entry->d_name);

    }

    chdir("..");

    closedir(dp);

}



/**//*  Now we move onto the main function.  */


int main(int argc, char* argv[])



{

    char *topdir, pwd[2]=".";

    if (argc != 2)

        topdir=pwd;

    else

        topdir=argv[1];


    printf("Directory scan of %s\n",topdir);

    printdir(topdir,0);

    printf("done.\n");


    exit(0);

}
    从主函数中我们看到,这是一个比较通用的做法:我们将子目录作为参数传递,而缺省则是当前所在子目录。
    这是一个目录浏览的小工具,再接再励我们可以完成得更好,比如将文件得更多信息显示出来等等。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50685/showart_1889606.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP