龙空技术网

linux 遍历指定目录下所有文件

季盛永和 321

前言:

而今咱们对“linux全局搜索目录”大概比较关怀,我们都想要学习一些“linux全局搜索目录”的相关知识。那么小编同时在网上汇集了一些有关“linux全局搜索目录””的相关资讯,希望兄弟们能喜欢,我们一起来了解一下吧!

总体概述

在linux系统环境下,实现对指定的目录下所有文件的遍历。需要用到的函数有opendir, readdir, closedir三个函数。

函数原型

opendir函数原型:DIR *opendir(const char *name);

readdir函数原型:struct dirent *readdir(DIR *dirp);

closedir函数原型:int closedir(DIR *dirp);

函数作用

opendir函数的作用:打开一个给定的目录文件,并返回目录流指针。

readdir函数的作用:读取一个指向dirent的结构体指针。

closedir函数的作用:关闭一个已经打开的目录流指针,与opendir成对出现。

参数介绍

opendir参数介绍:

输入参数:name => 传入目录的路径名。返回值:DIR * => 成功:返回目录流指针;失败:返回 NULL。

readdir参数介绍:

输入参数:dirp => 打开的目录流指针,readdir成功之后就会指向下一个目录的指针。返回值:struct dirent * => 成功:返回目录结构体指针;失败或者到达目录流的末尾:返回 NULL。

closedir参数介绍:

输入参数:dirp => 打开的目录流指针返回值:成功:返回 0;失败: 返回 -1。

补充:struct dirent 结构体的原型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 */};
代码示例
#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <string.h>int main(int argc, char **argv){    if (argc != 2) {        printf("usage: %s <pathname>\r\n", argv[0]);        return -1;    }    DIR *dirp = opendir(argv[1]);    if (!dirp) {        printf("open dir %s failed.\r\n", argv[1]);        return -1;    }    struct dirent *dirent;    while ((dirent = readdir(dirp))) {        if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, ".."))            continue;        printf("%s\t", dirent->d_name);    }    printf("\n");    return closedir(dirp);}
使用方法
$ mkdir ~/clanguage && cd ~/clanguage$ touch directory.c    注:创建并拷贝代码到directory.c,保存退出。$ gcc -o directory directory.c$ ./directory ./       注:显示当前目录下的文件

注:由于作者能力有限,文中表述难免有错误。如果发现文中错误之处,敬请广大好友批评指正。

标签: #linux全局搜索目录