linux下c语言实现搜索根目录下所有文件

opendir()
函数原型:DIR *opendir(const char *path)
打开一个目录,失败返回NULL

DIR结构体原型为:struct_dirstream
在linux系统中:
    typedef struct _dirstream DIR;
    struct _dirstream
    {
        void* _fd;                          //描述符的指针。
        char* _data;                        //目录块。
        int_entry_data;                     //数据对应。
        char *__ptr;                        //当前指针
        int __entry_ptr;                    //对应ptr
        size_t __allocation;                //分配的空间
        size_t __size;                      //有效数据总数
        __libc_lock_define (, __lock);      //结构的互斥锁
};
*/

/*
readdir()
函数原型:struct dirent* readdir(DIR *dir_handle);
本函数读取dir_handle目录下的目录项,如果有未读取的目录项,返回,否则返回NULL
循环读取dir_handle目录和文件都读

 

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>

//搜索指定目录下的所有文件及其子目录下的文件
void getFileName(char *dirPath)
{
    DIR *dir=opendir(dirPath);
    if(dir==NULL)
        {
            printf("%d\n",strerror(errno));
            return;
        }
    chdir(dirPath);         //进入到当前读取目录
    struct dirent *ent;
    while ((ent=readdir(dir))!=NULL)
        {
            if(strcmp(ent->d_name,".")==0||strcmp(ent->d_name,"..")==0)
                {
                    continue;
                }
            struct stat st;
            stat(ent->d_name,&st);
            if(S_ISDIR(st.st_mode))
                {
                    getFileName(ent->d_name);
                }
            else
                {
                    printf("%s\n",ent->d_name);
                }
        }
    closedir(dir);
    chdir("..");    //返回当前目录的上一级目录
}

int main(int argc,char *argv[])
{
    getFileName("/");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值