• 简要过程
  1. 判断命令行参数,获取用户要查询的目录名
  2. 判断用户指定的是否为目录(封装成函数,只要判断是否为目录,就调用此函数)
  3. 如果是读目录,读入的还是个目录,拼接目录访问路径,再回第2步,如果不是目录而是普通文件,直接打印到屏幕上
  • 函数实现
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <dirent.h>
void isfile(char *name);
void read_dir(char *dir)
{
DIR *dp;
struct dirent *sdp;
char path[256];
dp=opendir(dir);
if(dp==NULL)
{
perror("opendir error");
return;

}
//读取目录项
while((sdp=readdir(dp))!=NULL)
{
if(strcmp(sdp->d_name,".")==0||strcmp(sdp->d_name,"..")==0)
{
continue;
}
//拼接目录项
sprintf(path,"%s/%s",dir,sdp->d_name);
isfile(path);
}
closedir(dp);
return;
}
void isfile(char *name)
{

int ret=0;
struct stat sb;
//获取文件属性
ret=stat(name,&sb);
if(ret==-1)
{
perror("stat error");
return;
}
//目录文件
if(S_ISDIR(sb.st_mode))
{
read_dir(name);
}
//普通文件
printf("%-20s\t\t%-ld\n",name,sb.st_size);
return;
}
int main(int argc,char *argv[])
{
//判断命令行参数
if(argc==1)
isfile(".");
else
isfile(argv[1]);
return 0;

}

实现递归遍历目录_递归遍历目录