linux下遍历某一目录下的内容

时间:2022-05-31 03:43:34

原文地址:http://xinzhiwen198941-163-com.iteye.com/blog/1008150

在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表示档案类型: 

view sourceprint?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