C언어 - 디렉토리 읽기 함수 readdir();

IT/C 언어


함수 원형 struct dirent * readdir(DIR * dirp);


디렉토리 포인터를 인자로 받고, 디렉토리의 정보를 읽어와 dirent라는 구조체에 값을 저장 후,

dirent 구조체 포인터를 반환한다.


struct dirent를 살펴보자.

struct dirent {

               ino_t                 d_ino;              /* inode number */

               off_t                 d_off;              /* offset to the next dirent */

               unsigned short  d_reclen;         /* length of this record */

               unsigned char   d_type;            /* type of file; not supported

                                                                    by all file system types */

               char                   d_name[256]; /* filename */

 };

위에서 부터 디렉토리의 아이노트 번호, 다음 dirent까지 옵셋, 레코드의 길이, 파일타입, 파일 이름이다.


Return value로,

 -디렉토리 읽기 성공시, dirent 구조체의 포인터를 반환한다. (따로 free해줄 필요가 없다)

 -디렉토리의 끝에 도달하거나 Error시에 NULL을 반환한다. (Error시에 해당 Error을 errno에 값이 저장된다)


사용 예를 보도록 하자.

readdir 함수는 읽기가 성공시 dirent라는 구조체의 포인터를 반환한다.

이 함수는 호출할 때마다 알아서 입력된 path에 정보들을 읽어온다.

따라서 입력 path의 끝에 도달하면 NULL을 반환하기 때문에, 위처럼 while 반복문에 조건문으로 사용된다.


사용 시 위의 예처럼 struct dirent * 변수를 선언해 주어야 하며,

dirent.h 헤더파일을 include 해주어야 한다.


아래 간단한 실행 예를 보자.


이처럼 파일의 끝에 도달할 때까지 입력 path의 정보를 읽어오는 것을 볼 수 있다.


$man readdir 입력 시 더 자세한 정보를 볼 수 있다.