이 글에서는 하나의 디렉터리가 주어졌을 때, 해당 디렉터리 안의 모든 파일과 하위 디렉터리를 나열하는 C 프로그램을 작성하는 방법을 알아봅니다.
디렉터리(directory)란 여러 개의 파일이 저장되는 공간 또는 위치를 의미합니다.
하위 디렉터리(subdirectory)는 루트 디렉터리 내부에 존재하는 디렉터리로, 그 안에 또 다른 하위 디렉터리를 중첩하여 가질 수도 있습니다.
C 언어에서는 <dirent.h> 헤더 파일에서 제공하는 함수들을 사용하면 디렉터리의 모든 파일과 하위 디렉터리를 아주 간단하게 나열할 수 있습니다.
주요 함수 설명
- opendir(): 지정한 경로의 디렉터리를 열고 디렉터리 스트림(DIR) 포인터를 반환합니다. 실패하면 NULL을 반환합니다.
- readdir(): 디렉터리 스트림에서 항목(파일 또는 하위 디렉터리)을 하나씩 읽어
struct dirent구조체 포인터로 반환합니다. 더 이상 읽을 항목이 없으면 NULL을 반환합니다. - closedir(): 열려 있는 디렉터리 스트림을 닫고 사용한 자원을 해제합니다.
예제 코드
#include <stdio.h>
#include <dirent.h>
int main(void){
struct dirent *files;
DIR *dir = opendir(".");
if (dir == NULL){
printf("Directory cannot be opened!");
return 0;
}
while ((files = readdir(dir)) != NULL)
printf("%s\n", files->d_name);
closedir(dir);
return 0;
}실행 결과
cprograms .. prog1.c prog2.c prog3.c ... prog41.c
위 실행 결과는 현재 디렉터리에 있는 모든 파일과 하위 디렉터리를 출력한 것입니다. 참고로 "."은 현재 디렉터리, ".."은 상위 디렉터리를 나타내므로 함께 출력됩니다. 만약 특정 경로의 디렉터리를 탐색하고 싶다면 opendir(".")의 인자를 원하는 경로 문자열로 변경하면 됩니다.