编写程序完成以下功能:
1.递归遍历/home目录,打印出所有文件和子目录名称及节点号。
2.判断文件类型,如果是子目录,继续进行递归遍历,直到遍历完所有子目录为止。
代码如下:
#include<stdio.h>
#include<dirent.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#include<bits/stdio.h>
#include<dirent.h>
char ss[256];
void Judge(char *Buffer)
{
DIR *dir;
struct dirent *dirp;
struct stat statbuf;
char Buf[256];
strcpy(Buf,Buffer);
printf("\n\n\nBuffer:%s\n",Buf);
if(lstat(Buf,&statbuf)<0)
{
perror("lsata:");
}
if(S_ISDIR(statbuf.st_mode))
{
dir = opendir(Buf);
if(dir)
{
while((dirp = readdir(dir)) != NULL)
{
if(strcmp(dirp->d_name,".")==0 || strcmp(dirp->d_name,"..")==0)
continue;
printf("\ninode = %ld\n", dirp->d_ino);
printf("file name:%s\n",dirp->d_name);
printf("cwd: %s\n",getcwd(ss,255));
if(dirp->d_type == 4)
{
strcat(Buf,"/");
strcat(Buf,dirp->d_name);
Judge(Buf);
}
}
}
else
{
perror("opendir error:");
}
closedir(dir);
}
else
{
printf("This is not directory\n");
}
}
int main()
{
DIR *dir;
struct dirent *dirp;
struct stat statbuf;
char Buffer[256];
printf(".........................................");
getcwd(Buffer, 255);
printf("\nthe current dir is : %s\n",Buffer);
strcpy(Buffer,"/home/yang/zuoye_2");
Judge(Buffer);
printf("...........................................\n");
return 0;
}
涉及的知识点:
1递归
2文件信息相关函数 :lstat()getcwd()函数
3目录文件库<dirent.h>的相关操作:DIR 结构体 dirent结构体
4string库里部分函数