在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