1 요약 #
- 원문링크 :
http://www.scit.wlv.ac.uk/~jphb/spos/notes/calls/directory.html (완전히 내용이 같지는 않습니다. 요약수준)
- 아래 나열된 함수들은 디렉토리조회에서 필요한 함수/타입값입니다.
- unix 호환 운영체계 및 cygwin, mingw에서 사용가능합니다. (win32 API는 별도의 함수로 존재)
2 기선언된 타입들 #
| DIR | 열린 디렉토리를 가리키는 포인터를 담는데 사용. FILE *와 비슷하다. |
| struct dirent | 디렉토리 엔트리에 대한 정보를 담고 있는 구조체 |
struct dirent
{
ino_t d_ino; /* i-number */
off_t d_off; /* offset into directory file */
ushort d_reclen; /* length of record */
char d_name[1]; /* file name */
}
3 관련함수 #
| 선언 | 내용 |
| DIR *opendir(const char *path) | 디렉토리를 연다 |
| struct dirent *readdir(DIR *dirp) | 열린 디렉토리내의 다음 엔트리를 얻는다. 끝까지 갔으면 NULL반환. |
| struct dirent *readdir_r(DIR *dirp,struct dirent *res) | readdir와 비슷하지만 매개변수로 버퍼주소를 가진다. 멀티쓰레드용. |
| long telldir(DIR *dirp) | 엔트리상의 현재 위치 반환 |
| void seekdir(DIR *dirp,long loc) | 엔트리 현재위치를 강제로 변경한다 |
| void rewinddir(DIR *dirp) | 엔트리 위치를 처음으로 되감는다 |
| int closedir(DIR *dirp) | 열린 디렉토리를 닫는다 |
4 예제 #
간단한 ls/dir과 같은 예제.
#include <stdio.h>
#include <dirent.h>
struct dirent *dptr;
main(int argc,char *argv[])
{
char buff[256];
DIR *dirp;
printf("Enter directory name ");
gets(buff);
if((dirp=opendir(buff))==NULL)
{
fprintf(stderr,"Error opening %s ",buff);
perror("dirlist");
exit(1);
}
while(dptr=readdir(dirp))
{
printf("%s\n",dptr->d_name);
}
closedir(dirp);
}









