• linux下c语言实现搜索根目录下所有文件(转-wangxiangshang)


     头文件:

    #include<dirent.h>
    #include<sys/types.h>
    
    opendir():
    函数原型:
    DIR * opendir(const char* path);
    打开一个目录,在失败的时候返回NULL(如果path对应的是文件,则返回NULL)
    DIR 结构体的原型为:struct_dirstream
    在linux系统中:
    typedef struct __dirstream DIR;
    struct __dirstream
    {
    void *__fd; /* `struct hurd_fd' pointer for descriptor. */
    char *__data; /* Directory block. */
    int __entry_data; /* Entry number `__data' corresponds to. */
    char *__ptr; /* Current pointer into the block. */
    int __entry_ptr; /* Entry number `__ptr' corresponds to. */
    size_t __allocation; /* Space allocated for the block. */
    size_t __size; /* Total valid data in the block. */
    __libc_lock_define (, __lock) /* Mutex lock for this structure. */
    };
    
    
    
    readdir():
    函数原型:
    struct dirent * readdir(DIR * dir_handle);
    本函数读取dir_handle目录下的目录项,如果有未读取的目录项,返回目录项,否则返回NULL。
    循环读取dir_handle,目录和文件都读
    返回dirent结构体指针,dirent结构体成员如下,(文件和目录都读)
      struct dirent
      {
      long d_ino; /* inode number 索引节点号 */
      off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
      unsigned short d_reclen; /* length of this d_name 文件名长 */
      unsigned char d_type; /* the type of d_name 文件类型 */
      char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
      }
    
    
    closedir():
    函数原型:
    
    int closedir(DIR * dir_handle);

     程序如下: 

    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <dirent.h>
    #include <errno.h>
    
    #include <sys/stat.h>
    #include <dirent.h>
    #include <errno.h>
    
    //搜索 指定目录下的所有文件及其子目录下的文件
    
    void getFileName(char * dirPath)
    {
            DIR *dir=opendir(dirPath);
            if(dir==NULL)
            {
                    printf("%s
    ",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
    ",ent->d_name);
                    }
            }       
            closedir(dir);
            chdir("..");//返回当前目录的上一级目录
    }
     
    int main(int argc, char *argv[])
    {
        getFileName("/home/gexin/program/");
        return 0;
    }
     
     
  • 相关阅读:
    Ckeditor(4.5.5) language 语言切换
    利用array_slice进行手动分页
    PHP API 接口访问之签名验证
    mysql外键的一些总结
    缺货置顶功能(类似功能可参考)
    [Exchange2013] 无法正常发送存入草稿箱 或者 只能发不能收
    [Exchange]2个不同域之间互发邮件
    [Citrix NetScaler] 简述
    [转载] cookie、JS记录及跳转到页面原来的位置
    [XenServer] XenServer修改IP 以及 root密码
  • 原文地址:https://www.cnblogs.com/sanchrist/p/3573488.html
Copyright © 2020-2023  润新知