模拟tree命令

N33_烟灰 2014-05-25 05:19:20

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

void print_dir(char *,int );
int main(int argc,char *argv[])
{
if(argc!=2)
{
fprintf(stderr,"用法:%s <文件名>\n",argv[0]);/*提示用法*/
exit(EXIT_FAILURE);
}
printf("%s:\n\n",argv[1]);/*总标示*/
print_dir(argv[1],0);/*调用函数*/
printf("**********over**********\n");
return 0;
}

void print_dir(char *dir,int width)/*width控制宽度*/
{
struct dirent *file;
struct stat buf;/*目录信息保存的结构体,系统定义*/
DIR *df=opendir(dir);
if(df==NULL)
{
perror("opendir error\n");
exit(EXIT_FAILURE);
}
chdir(dir);
while((file = readdir(df)) != NULL)
{
lstat(file->d_name,&buf);/*获取文件名字信息并保存至buf中*/
if(strncmp(".",file->d_name,1) == 0 )/*看是否为隐藏文件,以点开头的都不输出,不管是什么类型的文件*/
continue;
if(S_ISDIR(buf.st_mode)) /*判断是否为一个目录,是目录为真*/
{
printf("%*sD:%s/\n",width," ",file->d_name);//先默认输出0个空格
print_dir(file->d_name,width+6); /* 递归调用 */
}
else
printf("%*sF:%s\n",width," ",file->d_name);
}
chdir("..");
if( closedir(df)==-1)
{
perror("closedir error\n");
exit(EXIT_FAILURE);
}

}


这是模拟系统的tree命令,可是这样还是有些细节问题,目录太大太深似乎有点问题,希望有好心人指点一下。
而且我发现我while循环结束如果不加那句chdir(“..”);就会出很大的问题,有点不明白了,万一我的目录嵌套很深很深呢,那个返回树的上一级目录还行吗?
...全文
106 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,437

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧