linux-c 展示目录的小程序

展示指定目录的小程序

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir(char *dir,int depth){
	DIR *dp;
	struct dirent *entry;
	struct stat statbuf;

	if((dp = opendir(dir)) == NULL){
		fprintf(stderr, "cannot open directory: %s\n", dir);
		return;
	}

	chdir(dir);
	while((entry = readdir(dp)) != NULL){
		lstat(entry->d_name,&statbuf);
		if(S_ISDIR(statbuf.st_mode)){
			/*Found a directory,but ignore . and ..*/
			if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0){
				continue;
			}
			printf("%*s%s/ \n",depth,"",entry->d_name);
			/*Recurse at a new indent level*/
			printdir(entry->d_name,depth+4);
		}else{
			printf("%*s%s \n",depth,"",entry->d_name);
		}

	}
}
int main(){
	/*
	show directory
	*/
	printf("Directory scan of /home:\n");
	printdir("/home",0);
	printf("done. \n");
	
	exit(0);
}

根据参数输出目录的结构

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir(char *dir,int depth){
	DIR *dp;
	struct dirent *entry;
	struct stat statbuf;

	if((dp = opendir(dir)) == NULL){
		fprintf(stderr, "cannot open directory: %s\n", dir);
		return;
	}

	chdir(dir);
	while((entry = readdir(dp)) != NULL){
		lstat(entry->d_name,&statbuf);
		if(S_ISDIR(statbuf.st_mode)){
			/*Found a directory,but ignore . and ..*/
			if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0){
				continue;
			}
			printf("%*s%s/ \n",depth,"",entry->d_name);
			/*Recurse at a new indent level*/
			printdir(entry->d_name,depth+4);
		}else{
			printf("%*s%s \n",depth,"",entry->d_name);
		}

	}
}
int main(int argc, char* argv[]){
	/*
	show directory
	*/
	char *topdir = ".";
	if(argc >= 2){
		topdir = argv[1];
	}
	printf("Directory scan of %s:\n",topdir);
	printdir(topdir,0);
	printf("done. \n");
	
	exit(0);
}

你可能感兴趣的:(linux-c 展示目录的小程序)