文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux下目录遍历&结构体dirent

Linux下目录遍历&结构体dirent

时间:2010-09-09  来源:姜戏◥⊙▲⊙◤郎

 

在linux下遍历某一目录下内容LINUX下历遍目录的方法一般是这样的
打开目录->读取->关闭目录
相关函数是opendir -> readdir -> closedir,其原型如下:
#include <dirent.h>
DIR *opendir(const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

简单列举一例:

#include<dirent.h>    

  

        struct dirent* ent = NULL;
        DIR *pDir;
        
        if( (pDir=opendir("/home/test")) == NULL)
        {
                printf("open dir %s failed\n", pszBaseDir);
                return false;
        }

        while( (ent=readdir(pDir)) != NULL )
        {
              printf("the ent->d_reclen is%d the ent->d_type is%d the ent->d_name is%s\n", ent->d_reclen, ent->d_type, ent->d_name);  

        }


        closedir(pDir);

 

 

其中有一很关键的结构体dirent:

代码
On Linux, the dirent structure is defined as follows: 

struct dirent {
ino_t d_ino;
/* inode number */
off_t d_off;
/* offset to the next dirent */
unsigned
short d_reclen; /* length of this record */
unsigned
char d_type; /* type of file */
char d_name[256]; /* filename */
};

其中inode表示存放的是该文件的结点数目(具体可了解linux下的文件系统),d_off 是文件在目录中的编移,这两个基本很少用。

d_type表示档案类型:

enum

{

    DT_UNKNOWN = 0,

# define DT_UNKNOWN DT_UNKNOWN

    DT_FIFO = 1,

# define DT_FIFO DT_FIFO

    DT_CHR = 2,

# define DT_CHR DT_CHR

    DT_DIR = 4,

# define DT_DIR DT_DIR

    DT_BLK = 6,

# define DT_BLK DT_BLK

    DT_REG = 8,

# define DT_REG DT_REG

    DT_LNK = 10,

# define DT_LNK DT_LNK

    DT_SOCK = 12,

# define DT_SOCK DT_SOCK

    DT_WHT = 14

# define DT_WHT DT_WHT

};

d_reclen认为是纪录的长度,计算方式应该是4(d_ino)+4(d_off)+2(d_reclen)+1(d_type)+1(补齐位)+4N(d_name会自动补齐:1.jpg为8,12.jpg也为8,1234.jpg也为8,12345.jpg则为12);

d_name表示文件名,如test.jpg

 

 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载