Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1394379
  • 博文数量: 343
  • 博客积分: 13098
  • 博客等级: 上将
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-06 00:35
文章存档

2012年(131)

2011年(31)

2010年(53)

2009年(23)

2008年(62)

2007年(2)

2006年(36)

2005年(5)

分类: LINUX

2008-05-21 17:17:43

Q:大家好,我现在遇到一个问题,就是要在一个文件夹下面搜索,判断该文件夹下面的文件是不是文件夹;我以前的做法如下:
struct stat statbuf;
if (lstat(pathname,&statbuf)  <0){//pathname
是文件名的绝对路径
printf("lstate error %d\n",errno);
return -errno;
}
if (S_ISDIR(statbuf.st_mode) ==0){
就不是文件夹
}
上面代码文件不是很多的情况下,是可行的,一旦文件多啦,就非常的慢!
请问各位,是否有提高速度的方法呢??
请高手们指点啊!

 

A: opendir不过由于d_type成员不是每个操作系统都提供不具有移植性.
为了性能这也是无奈之举. 没有实际测试过, 不过据俺了解在大多数Unix系统上lstat, stat, fstat都是系统调用readdir是库函数所做的操作只是在DIR *dirp链表中取下一项开销上的差别可想而知.

 

/*
 * File: isdir.c
 * Date: 2008-03-14
 * Auth: mymtom
 */
#include 
#include 
#include <string.h>
 
#include 
#include 
 
#ifndef DT_DIR
#error "DT_DIR not defined, maybe d_type not a mumber of struct dirent!"
#endif
 
int
main(int argc, char *argv[])
{
        static char dot[] = ".", dotdot[] = "..";
        const char *name;
        DIR *dirp;
        struct dirent *dp;
 
        if (argc == 2)
                name = argv[1];
        else
                name = dot;
 
        dirp = opendir(name);
        if (dirp == NULL) {
                (void)fprintf(stderr, "%s: opendir(): %s: %s\n",
                    argv[0], name, strerror(errno));
                exit(errno);
        }
 
        while ((dp = readdir(dirp)) != NULL) {
                if (dp->d_type == DT_DIR)
                        if ( strcmp(dp->d_name, dot)
                            && strcmp(dp->d_name, dotdot) )
                                (void)printf("%s/\n", dp->d_name);
        }
        (void)closedir(dirp);
 
        return (0);
}
阅读(997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~