linux opendir和readdir的使用

您所在的位置:网站首页 readdir函数用法 linux opendir和readdir的使用

linux opendir和readdir的使用

2023-11-26 21:14| 来源: 网络整理| 查看: 265

1    opendir

#include #include

DIR *opendir(const char *name);

传入name路径,成功则返回非空DIR指针,否则返回NULL

2    readdir

     #include        struct dirent *readdir(DIR *dirp);        int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

readdir一般要配合opendir使用,readdir不是线程安全函数,代替他的有readdir_r。

readdir返回 struct dirent *指针,读完目录下所有文件时,返回NULL

如果系统支持readdir_r,建议用readdir_r , readdir_r成功返回0。

关于struct dirent结构体:

 On Linux, the dirent structure is defined as follows:   struct dirent {       ino_t      d_ino;   /* inode number */       off_t      d_off;   /* not an offset; see NOTES */       unsigned short d_reclen;    /* length of this record */       unsigned char  d_type;   /* type of file; not supported      by all filesystem types */       char      d_name[256]; /* filename */   };

3    closedir

      #include        #include        int closedir(DIR *dirp);

closedir配合opendir使用。

#include #include #include #include #include #include //DIR *opendir(const char *name); #ifndef LOG_TRACE #define LOG_TRACE printf #define LOG_INFO(msg) \ do{ \ LOG_TRACE msg; \ LOG_TRACE("[%s %d] \n",__FUNCTION__,__LINE__);\ }while(0) #define LOG_ERROR(err_info) \ do{ \ LOG_TRACE err_info; \ LOG_TRACE("[%s %d] \n",__FUNCTION__,__LINE__);\ }while(0) #endif extern int errno; int open_dir_1(const char *pDirname) { DIR * dirp = NULL; struct dirent * pDirent= NULL; if((NULL == pDirname) || (0 == strlen(pDirname))) { LOG_ERROR(("param error")); return -1; } dirp = opendir(pDirname); if (NULL == dirp) { LOG_ERROR(("opendir %s failed! error_no: %s",pDirname , strerror(errno))); return -1; } while (NULL != (pDirent = readdir(dirp))) { if (pDirent->d_type == DT_DIR ) { LOG_ERROR(("dir [%s] ",pDirent->d_name)); } else if(pDirent->d_type == DT_REG) { LOG_ERROR(("file [%s] ",pDirent->d_name)); } } closedir(dirp); return 0; } int open_dir_2(const char *pDirname) { DIR * dirp = NULL; struct dirent * pDirent= NULL; struct dirent *pStResult = NULL; if((NULL == pDirname) || (0 == strlen(pDirname))) { LOG_ERROR(("param error")); return -1; } dirp = opendir(pDirname); if (NULL == dirp) { LOG_ERROR(("opendir %s failed! error_no: %s",pDirname , strerror(errno))); return -1; } pDirent = (struct dirent *)malloc(sizeof(struct dirent)); if(!pDirent) { LOG_ERROR(("pDirent error")); closedir(dirp); return -1; } while (( 0== readdir_r(dirp,pDirent,&pStResult))&& (pStResult != NULL)) { if (pDirent->d_type == DT_DIR ) { LOG_ERROR(("dir [%s] ",pDirent->d_name)); } else if(pDirent->d_type == DT_REG) { LOG_ERROR(("file [%s] ",pDirent->d_name)); } } closedir(dirp); return 0; } int main() { LOG_ERROR(("***********")); open_dir_1("/share/"); LOG_ERROR(("------------")); open_dir_2("/share/"); LOG_ERROR(("-++--+++--")); return 0; }

运行结果:

./a.out [19@gcc test_opendir_readdir.c[C root@ubuntu:/share#  root@ubuntu:/share#  root@ubuntu:/share# gcc test_opendir_readdir.c  /a.out  ***********[main 113]   file     [zlib-1.2.8.tar.gz]        [open_dir_1 54]   file     [1.tmp]        [open_dir_1 54]   file     [log.c]        [open_dir_1 54]   file     [list.c]        [open_dir_1 54]   dir      [11]       [open_dir_1 50]   file     [test.out]        [open_dir_1 54]   file     [test_system_func.c]        [open_dir_1 54]   file     [a.out]        [open_dir_1 54]   file     [test_strncpy.c]        [open_dir_1 54]   file     [test_proc_partitions.c]        [open_dir_1 54]   file     [test.c]        [open_dir_1 54]   file     [New0001.c]        [open_dir_1 54]   dir      [curl-7.51.0]       [open_dir_1 50]   file     [test_ftok.c]        [open_dir_1 54]   file     [log.h]        [open_dir_1 54]   file     [test_gettimeofday.c]        [open_dir_1 54]   file     [csdn.c]        [open_dir_1 54]   file     [client.c]        [open_dir_1 54]   file     [1.txt]        [open_dir_1 54]   file     [test_opendir_readdir.c]        [open_dir_1 54]   file     [curl-7.51.0.tar.gz]        [open_dir_1 54]   file     [2.txt]        [open_dir_1 54]   file     [opendir.c]        [open_dir_1 54]   dir      [zlib-1.2.8]       [open_dir_1 50]   file     [123.rmvb]        [open_dir_1 54]   dir      [ffmpeg_learn]       [open_dir_1 50]   file     [test_sem.c]        [open_dir_1 54]   file     [test_list.c]        [open_dir_1 54]   file     [list.h]        [open_dir_1 54]   file     [server]        [open_dir_1 54]   dir      [ProFFmpeg]       [open_dir_1 50]   dir      [ffmpeg-3.1.6]       [open_dir_1 50]   dir      [yasm-1.3.0]       [open_dir_1 50]   file     [New0003.c]        [open_dir_1 54]   dir      [.]       [open_dir_1 50]   dir      [..]       [open_dir_1 50]   file     [ffmpeg-3.1.6.tar.gz]        [open_dir_1 54]   file     [types.h]        [open_dir_1 54]   file     [New0002.c]        [open_dir_1 54]   file     [simple.out]        [open_dir_1 54]   file     [server.c]        [open_dir_1 54]   dir      [learn]       [open_dir_1 50]   file     [simple_ffmpeg_player.c]        [open_dir_1 54]   file     [client]        [open_dir_1 54]   dir      [abc]       [open_dir_1 50]   file     [yasm-1.3.0.tar.gz]        [open_dir_1 54]   file     [output.yuv]        [open_dir_1 54]   file     [mySDLFirst.out]        [open_dir_1 54]   ------------[main 115]   file     [zlib-1.2.8.tar.gz]        [open_dir_2 100]   file     [1.tmp]        [open_dir_2 100]   file     [log.c]        [open_dir_2 100]   file     [list.c]        [open_dir_2 100]   dir      [11]       [open_dir_2 96]   file     [test.out]        [open_dir_2 100]   file     [test_system_func.c]        [open_dir_2 100]   file     [a.out]        [open_dir_2 100]   file     [test_strncpy.c]        [open_dir_2 100]   file     [test_proc_partitions.c]        [open_dir_2 100]   file     [test.c]        [open_dir_2 100]   file     [New0001.c]        [open_dir_2 100]   dir      [curl-7.51.0]       [open_dir_2 96]   file     [test_ftok.c]        [open_dir_2 100]   file     [log.h]        [open_dir_2 100]   file     [test_gettimeofday.c]        [open_dir_2 100]   file     [csdn.c]        [open_dir_2 100]   file     [client.c]        [open_dir_2 100]   file     [1.txt]        [open_dir_2 100]   file     [test_opendir_readdir.c]        [open_dir_2 100]   file     [curl-7.51.0.tar.gz]        [open_dir_2 100]   file     [2.txt]        [open_dir_2 100]   file     [opendir.c]        [open_dir_2 100]   dir      [zlib-1.2.8]       [open_dir_2 96]   file     [123.rmvb]        [open_dir_2 100]   dir      [ffmpeg_learn]       [open_dir_2 96]   file     [test_sem.c]        [open_dir_2 100]   file     [test_list.c]        [open_dir_2 100]   file     [list.h]        [open_dir_2 100]   file     [server]        [open_dir_2 100]   dir      [ProFFmpeg]       [open_dir_2 96]   dir      [ffmpeg-3.1.6]       [open_dir_2 96]   dir      [yasm-1.3.0]       [open_dir_2 96]   file     [New0003.c]        [open_dir_2 100]   dir      [.]       [open_dir_2 96]   dir      [..]       [open_dir_2 96]   file     [ffmpeg-3.1.6.tar.gz]        [open_dir_2 100]   file     [types.h]        [open_dir_2 100]   file     [New0002.c]        [open_dir_2 100]   file     [simple.out]        [open_dir_2 100]   file     [server.c]        [open_dir_2 100]   dir      [learn]       [open_dir_2 96]   file     [simple_ffmpeg_player.c]        [open_dir_2 100]   file     [client]        [open_dir_2 100]   dir      [abc]       [open_dir_2 96]   file     [yasm-1.3.0.tar.gz]        [open_dir_2 100]   file     [output.yuv]        [open_dir_2 100]   file     [mySDLFirst.out]        [open_dir_2 100]   -++--+++--[main 118]   root@ubuntu:/share# 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3