Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99141
  • 博文数量: 11
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-23 16:34
文章分类
文章存档

2012年(11)

我的朋友

分类: C/C++

2012-11-06 16:13:00

Linux下遍历输出目录下的文件

Linuxopendir()readdir()closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件:

#include

#include

1.Readdir()函数原型:

#include

#include

DIR * opendir(const char * name);

函数说明:opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。

函数返回值: 成功则返回DIR* 型态的目录流,打开失败则返回NULL

错误代码:

EACCESS 权限不足

EMFILE 已达到进程可同时打开的文件数上限。

ENFILE 已达到系统可同时打开的文件数上限。

ENOTDIR 参数name非真正的目录

ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。

ENOMEM 核心内存不足

结构体DIR原型:

         typedef struct __dirstream DIR;

       struct __dirstream

       {

         void                   *__fd;                /* `struct hurd_fd' pointer for descriptor.   */

         char                   *__data;            /* Directory block.   */

         int                       __entry_data;    /* Entry number `__data' corresponds to.   */

         char                   *__ptr;               /* Current pointer into the block.   */

         int                       __entry_ptr;        /* Entry number `__ptr' corresponds to.   */

         size_t                  __allocation;      /* Space allocated for the block.   */

         size_t                  __size;                /* Total valid data in the block.   */

         __libc_lock_define (, __lock)          /* Mutex lock for this structure.   */

        };

2.Readdir()函数原型:

#include

#include

struct dirent *readdir(DIR   *dir)

函数说明:  readdir()返回参数dir目录流的下个目录进入点。

函数返回值:成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL

结构dirent定义如下:

Struct dirent

{

        ino_t                           d_ino;                          //此目录进入点的inode

        ff_t                           d_off;                           //目录文件开头到此目录进入点的位移

        signed  short int      d_reclem;                             //_name的长度,不包含NULL字符

        unsigned  char             d_type;                        // d_name所指的文件类型

        char                           d_name[256];             //文件名

}

3. closedir(DIR   *dir)函数的原型:

int closedir(DIR *dir);

这个函数就不用多说了,一般有开(open),就有关(close),这样的结构经常可出看到,如fopenfclose等等。

4.源码示例:

#include

#include

 

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

{

         struct dirent *pDirEntry = NULL;

         DIR          *pDir      = NULL;

         if( (pDir = opendir("/root/")) == NULL )

         {

                   printf("opendir failed!\n");

                   return 1;

         }

         else

         {

                   while( pDirEntry = readdir(pDir) )

                   {

                            printf("索引节点:%d\t 偏移量:%d\t 文件名长:%d\t文件类型:%d\t 文件名:%s\n",

                            pDirEntry->d_ino, pDirEntry->d_off,

                            pDirEntry->d_reclen,pDirEntry->d_type,pDirEntry->d_name);

                   }

                   closedir(pDir);

                   return 0;    

         }       

}


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