구글애드센스


UNIX - 디렉토리 탐색 프로그램. STUDY



// http://muzie.egloos.com      
// implemented by Shin Jaeyong [Hansung Univ.]
// mailto : sjy1937@hotmail.com      

// Usage : ./filename [DIRNAME]    
// For [UNIX SYSTEM] Only          

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

FILE *fp;
int depth = 0;

void recursive_search(char *dirname)
{

DIR *dp; //디렉토리 파일 포인터.
struct stat buf;
struct dirent *d;
char filename[BUFSIZ+1];
int cnt;
if((dp = opendir(dirname)) == NULL) // directory open
{
perror(dirname);
depth--;
return ;
}

while((d = readdir(dp)) != NULL) // directory read.
{
sprintf(filename,"%s/%s", dirname, d->d_name); // make absolute path name
if(lstat(filename, &buf) < 0)
{
perror(filename);
depth--;
return ;
}

if((buf.st_mode & S_IFMT) == S_IFDIR) // if filename is directory name.
{
if(!strcmp(d->d_name,".") || !strcmp(d->d_name,"..")) // current directory or upper directory
continue ; // return
if(depth > 0)
{
for(cnt = 0 ; cnt < depth; cnt++)
{
printf("\t");
fprintf(fp,"\t");
}
printf("->[%s]",d->d_name);
fprintf(fp,"->[%s]",d->d_name);
depth++;
printf("\n");
fprintf(fp,"\n");
recursive_search(filename);
}
else
{
printf("DIR[%s]\t", filename);
fprintf(fp,"DIR[%s]\t",filename);
//printf("I-node-Number = %5d\t### depth_is = %d ###", buf.st_ino,depth);
//fprintf(fp,"I-node-Number = %5d\n",buf.st_ino);
depth++;
printf("\n");
fprintf(fp,"\n");
recursive_search(filename);
}
}
}
if(closedir(dp) < 0 )
{
perror(filename);
depth--;
return ;
}
depth--;
}

int main(int argc , char *argv[])
{
char *dirname;
dirname = argv[1];
fp = fopen("result.txt","w+");
recursive_search(dirname);
fclose(fp);
return 0;
}

아규먼트로 폴더위치를 주면 그 폴더위치부터 탐색을 하여 하위 모든 폴더를 읽어서 프린트 해주고 result.txt 라는 파일로 저장시켜주는 간단한 프로그램을 작성해 보았다. 뭐 그럭저럭 돌아가는 것 같고.. 머리가 돌이라 리커시브 이외엔 그닥 다른 방법이 떠오르지 않아서 리커시브로 구현하였다.

예외처리는 안했고.. 그냥 돌아가게만 해놓은 상태이다.


덧글

댓글 입력 영역