linux opendir,linux opendir和readdir的使用

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#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值