dir结构体 linux_Linux下目录遍历&结构体dirent - 姜戏◥⊙▲⊙◤郎 - 博客园

在linux下遍历某一目录下内容LINUX下历遍目录的方法一般是这样的

打开目录->读取->关闭目录

相关函数是opendir -> readdir -> closedir,其原型如下:

#include

DIR *opendir(const char *dirname);

struct dirent *readdir(DIR *dirp);

int closedir(DIR *dirp);

简单列举一例:

#include

structdirent*ent=NULL;

DIR*pDir;if( (pDir=opendir("/home/test"))==NULL)

{

printf("open dir %s failed\n", pszBaseDir);returnfalse;

}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 structureisdefinedasfollows:structdirent {

ino_t d_ino;/*inode number*/off_t d_off;/*offset to the next dirent*/unsignedshortd_reclen;/*length of this record*/unsignedchard_type;/*type of file*/chard_name[256];/*filename*/};

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

d_type表示档案类型:

01

enum

02

{

03

DT_UNKNOWN = 0,

04

# define DT_UNKNOWN DT_UNKNOWN

05

DT_FIFO = 1,

06

# define DT_FIFO DT_FIFO

07

DT_CHR = 2,

08

# define DT_CHR DT_CHR

09

DT_DIR = 4,

10

# define DT_DIR DT_DIR

11

DT_BLK = 6,

12

# define DT_BLK DT_BLK

13

DT_REG = 8,

14

# define DT_REG DT_REG

15

DT_LNK = 10,

16

# define DT_LNK DT_LNK

17

DT_SOCK = 12,

18

# define DT_SOCK DT_SOCK

19

DT_WHT = 14

20

# define DT_WHT DT_WHT

21

};

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_reclen是20和24(其中.和..是16)。

d_name表示文件名,如test.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值