#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
void printdir(char * dir , int depth){
DIR * dp; //구조체 DIR의 포인터 변수
struct dirent * entry; // 구조체 dirent(디렉토리 엔트리)포인터 변수
struct stat stabuf; // 구조체 stat버퍼 변수
if(!(dp = opendir(dir))) // 문자열 dir로 디렉토리 열기에 실패하면
{
fprintf(ctderr,"cannot open directory : %s\n",dir); //오류메시지 출력
return ; // 함수종료
}
chdir(dir); //문자열 dir에 저장되어 있는 디렉토리로 이동
//dp에 저장된 디렉토리 엔트리를 읽어들여 entry에 저장
//저장된 값이 참인 동안 실행
while(entry = readdir(dp))
{
lstat(entry -> d_name, &statbuf); //entry에 저장된 디렉토리명을 상태 버퍼에 저장
if(S_ISDIR(statbuf.st_mode)){//상태버퍼의 모드 값을 검사하고. 디렉토리이면
if(!strcmp(".",entry->d_name)||!strcmp("..",entry->d_name))//문자열이"."또는".."이면
continue; //다음 엔트리 읽어들이기
//디렉토리나 파일이면
printf(entry -> d_name,depth,"",entry->d_name);//depth와 파일명을 출력
}
else //디렉토리가 아니고 파일이면
printf("%*s%\n",depth,"",entry->d_name);//depth와 파일명을 출력
}
chdir(".."); // 이전 디렉토리로 이동
closedir(dp); // dp에 열려있는 디렉토리 닫기
}
int main(void)
{
printf("Directory scan of /home/neil : \n");
printdir("/home/neil",0);//디렉토리 출력 함수 호출
printf("done.\n");
return EXIT_SUCCESS;//프로그램 정상종료
}
'차근차근 > Linux' 카테고리의 다른 글
[Linux] Tomcat 다중으로 설치하기 (0) | 2016.03.15 |
---|---|
centOS 메일서버 작동안함 (0) | 2016.03.03 |
리눅스 메일서버 확인 (0) | 2014.10.15 |
linux tomcat log 한글 깨짐현상 (0) | 2014.09.18 |
리눅스 /etc/hosts.conf (0) | 2014.09.18 |