注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[FreeBSD] 遍历目录  

2010-07-30 15:41:21|  分类: os_FreeBSD |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有代码,有真相。

最原始的方法
最早的几个函数:opendir, readdir, rewinddir, closedir。属于 POSIX 标准。
----------------------------------------------------------------------
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
        DIR *dirp;
        struct dirent *dp;

        if ( argc != 2 )
        {
                printf("usage: %s <dir>\n", argv[0]);
                return 1;
        }

        dirp = opendir(argv[1]);
        if ( dirp == NULL )
        {
                printf("ERROR: %s is not dir\n", argv[1]);
                return 1;
        }

        while ((dp = readdir(dirp)) != NULL)
        {
                if ( dp->d_type == DT_DIR )
                {
                        printf("[%s]\n", dp->d_name);
                }
                else if ( dp->d_type == DT_REG )
                {
                        printf("<%s>\n", dp->d_name);
                }
        }
        closedir(dirp);

        return 0;
}
----------------------------------------------------------------------

新的 POSIX 函数
ftw, 好像各大操作系统都是先了,但我在 FreeBSD 7.2 上居然没有任何输出,linux下就没问题。
----------------------------------------------------------------------
#include <ftw.h>
#include <stdio.h>

static int
myfunc(const char *pathname, const struct stat *st, int type)
{
        switch (type)
        {
        case FTW_F:
                if ( S_ISDIR(st->st_mode) )
                {
                        printf("ERROR! should be FTW_D\n");
                }
                else
                {
                        printf("<%s>\n", pathname);
                }
                break;

        case FTW_D:     // dir
                printf("[%s]\n", pathname);
                break;
        }

        return 0;
}

int main(int argc, char *argv[])
{
        if ( argc != 2 )
        {
                printf("usage: %s <dir>\n", argv[0]);
                return 1;
        }

        ftw(argv[1], myfunc, 100);
        return 0;
}
----------------------------------------------------------------------
  评论这张
 
阅读(647)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017