一个linux下目录遍历函数,有个问题,chdir(dir);chdir("..")这两句为什么变更目录

软件和网站开发以及相关技术探讨
回复
glider2014
帖子: 5
注册时间: 2014-03-24 14:14
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

一个linux下目录遍历函数,有个问题,chdir(dir);chdir("..")这两句为什么变更目录

#1

帖子 glider2014 » 2014-04-15 14:52

#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;

}
头像
astolia
论坛版主
帖子: 4617
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 773 次

Re: 一个linux下目录遍历函数,有个问题,chdir(dir);chdir("..")这两句为什么变更目录

#2

帖子 astolia » 2014-04-15 23:32

readdir读出的entry->d_name是不带路径的,交给lstat时会被认为是相对路径,也就是相对于当前目录的位置,所以在lstat之前要改变当前目录,才能让lstat获得正确的结果。
这些用户感谢了作者 astolia 于这个帖子:
glider2014 (2014-06-21 17:50)
评价: 3.7%
回复

回到 “软件/网站开发”