Linux C语言遍历目录结构

遍历目录结构查找文件是很常用的功能,今天介绍一下使用Linux C 遍历Linux目录结构的方法:

  linux提供几个系统调用,以便于直接目录的读取和操作:

  DIR * opendir(const char * pathname);

  struct dirent * readdir(DIR * dir_handle);

  int closedir(DIR * dir);

  int stat(const char *file_name, struct stat *buf);

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <dirent.h>          //包含目录操作的相关函数
/** * @Param  pathname 要遍历的目录全路径名称 * @Param  depth 当前的遍历等级,初始为0 */
void printdir(const char * pathname, const int depth)
{
	DIR * dir;
	struct dirent * de;
	struct stat fs;
	int i = 0;

	if((dir = opendir(pathname)) == NULL)
	{
		printf("open dir %s error \r\n", pathname);
		return;
	}

	chdir(pathname);
	while((de = readdir(dir)) != NULL)
	{
		if(strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0){continue;}

		if(stat(de->d_name, &fs) == -1){perror("fstat error");continue;}

		if(S_ISDIR(fs.st_mode))
		{              /**               * 如果当前路径是目录,就递归调用printdir函数               */
			for(i=0;i<depth;++i){printf(" ");}
			printf("%s\r\n", de->d_name);
			printdir(de->d_name, depth + 4);
		}
		else
		{
			for(i=0;i<depth;++i)
			{
				printf(" ");
			}

			printf("%s\r\n", de->d_name);
		}
	}
	chdir("..");
	closedir(dir);

	return;
}

int main(int argc, char ** argv)
{
	printdir("/root/projects", 0);

	return 0;
}

Linux 自带的目录遍历函数

int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),

int ( * compare )( const struct dirent **, const struct dirent ** ) );
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);

具体函数使用方法见man

时间: 2024-08-25 08:09:57

Linux C语言遍历目录结构的相关文章

linux c++有序遍历目录

readdir读取的顺序貌似没什么规律的. 这里http://bbs.csdn.net/topics/310054496有人说跟每个文件的d_off有关.但在我机器上测试过貌似没有规律. 好吧. 其实我只是需要确保每次遍历文件夹的时候,顺序都是一样的就行了.所以自己排序一下即可. /** * path:目录 * files:用于保存文件名的vector * r:是否需要遍历子目录 */ void listDir(const char *path,vector<string>& file

【转】完美解读Linux中文件系统的目录结构

一.前 言 接触Linux也有一段时间了,不过这几天在编译开源程序时,才发现自己对linux文件系统的目录结构了解的不够透彻,很多重要目录都说不清楚是用来干嘛的,于是在网上百度了一下这方面的介绍,根据自己的使用习惯,整理出来一篇关于Linux文件系统的目录结构的文章,和大家一起分享. 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构.同时文章最后附录了一份Linux目录结构的简明手册,以便大家查阅. 二.目 录 1.什么是文件系统 2.文

Python提取Linux内核源代码的目录结构

今天用Python提取了Linux内核源代码的目录树结构,没有怎么写过脚本程序,我居然折腾了2个小时,先是如何枚举出给定目录下的所有文件和文件夹,os.walk可以实现列举,但是os.walk是只给出目录名和文件名,而没有绝对路径.使用os.path.listdir可以达到这个目的,然后是创建目录,由于当目录存在是会提示创建失败的错误,所以我先想删除所有目录,然后再创建,但是发现还是有问题,最好还是使用判断如果不存在才创建目录,存在时就不创建,贴下代码: # @This script can b

Linux界面交互与目录结构

一.交互通道 Linux系统环境默认有六个命令交互通道和一个图形界面交互通道,默认进入的是图形界面通道. 命令交互模式切换:ctrl+alt+F1-F6 图形界面交互模式:ctrl+alt+F7   图形界面参数介绍:[email protected]:~$ kaiye:用户名 Ubuntu:主机名 ~:路径,假如当前的路径正好是 该用户存放数据的根目录,则显示~,如windows系统下C盘用户名文件夹下的目录 $:用户类型 $代表普通用户,#代表超级用户 二.Linux目录结构  1.bin:

Linux文档与目录结构

Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有"盘(C盘.D盘.E盘)"的概念.已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来实现磁盘读写. Linux不像Windows那样的系统目录,Linux使用正斜杠"/"而不是反斜杠"\"来标识目录. Windows目录: Linux目录: Linux首先是建立一个根"/"文件系统,所有的目录也都是由根目录衍生出

04 Linux根文件系统和目录结构及bash特性

Linux文件系统: Linux:glibc 程序编译方式: 动态链接式编译 静态链接式编译 进程的类型: 终端:硬件设备,在硬件设备上可以关联一个用户接口,从而让用户用此接口与操作系统打交道 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 操作系统的组成: 静态:kernel(内核),application(应用程序) 文件系统:层级结构 FHS: Filesystem Hierarchy Standard(文件系统层次化标准) /bin:所有用户可用的基本命令程序文件 /

Linux基础——文件系统与目录结构

文件系统 文件和目录被组织成一个单根倒置树结构 文件系统从根目录下开始,根文件系统(rootfs): root filesystem,用"/" 表示 文件名称区分大小写 以.开头的文件为隐藏文件 路径分隔符: / 文件有两类数据:元数据: metadata数据: data 文件系统分层结构: LSB(Linux Standard Base) FHS: (Filesystem Hierarchy Standard):文件系统层级标准,具体请参考:http://www.pathname.c

4.Linux根文件系统和目录结构及bash特性

4.1Linux目录结构和根文件系统全面讲解 Linux文件系统: Linux:glibc 程序编译方式: 动态链接 静态编译 进程的类型: 终端:硬件设备, 关联一个用户接口 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 操作系统的组成: 静态:Kernel,application 文件系统:层级结构 FHS: Filesystem Hierachry Stanard /bin: 所有用户可用的基本命令程序文件 /sbin:供系统管理使用的工具程序 /boot:引导加载器

Linux下文档与目录结构

目录分类 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来实现磁盘读写. Linux不像Windows那样的系统目录,Linux使用正斜杠"/"而不是反斜杠"\"来标识目录 /var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下.包括各种日志文件. /etc: 这个目录用来存放所有的系统管理所需要的配置