#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.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))
{
if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)
continue;
printf("%*s%s/\n",depth,"",entry->d_name);
printdir(entry->d_name,depth+4);
}
else printf("%*s%s\n",depth,"",entry->d_name);
}
chdir("..");
closedir(dp);
}
int main()
{
printf("Directory scan of /home:\n");
printdir("/home",0);
printf("done.\n");
return 0;
}
一个linux下目录遍历函数,有个问题,chdir(dir);chdir("..")这两句为什么变更目录
-
- 帖子: 5
- 注册时间: 2014-03-24 14:14
- 系统: ubuntu
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: 一个linux下目录遍历函数,有个问题,chdir(dir);chdir("..")这两句为什么变更目录
readdir读出的entry->d_name是不带路径的,交给lstat时会被认为是相对路径,也就是相对于当前目录的位置,所以在lstat之前要改变当前目录,才能让lstat获得正确的结果。