readdir − 디렉토리 엔트리를 읽는다.
#include <unistd.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
_syscall3(int, readdir, uint, fd, struct dirent *, dirp, uint, count);
int readdir(unsigned int fd, struct dirent *dirp, unsigned int count);
이것은 여러분이 흥미로워 할 함수가 아니다. C 라이브러리 인터페이스에 구현된 POSIX 를 위한 readdir(3)를 참조해라. 이 페이지는 이미 바뀐 예전 커널 시스템 콜 인터페이스를 위한 문서이며 이 함수는 getdents(2)가 대신하고 있다.
readdir 는 fd 에 의해 포인트된 디렉토리에서 dirp에 의해 포인트된 메모리 지역에 dirent 구조체를 읽는다. count 인자는 무시된다;
dirent 구조체에 다음과 같이 선언된다:
struct dirent
{
long d_ino; /* 아이노드 수 */
off_t d_off; /* dirent 의 오프셋 */
unsigned short d_reclen; /* d_name 의 길이 */
char d_name [NAME_MAX+1]; /* 파일 이름(널로 종료) */
}
d_ino 는 inode 숫자이다. d_off 는 디렉토리의 시작에서 dirent까지의 거리이다. d_reclen 는 널 종결자를 세지 않은 d_name의 크기이다. d_name 는 널로 끝난 파일 이름이다.
성공시, 1이 리턴된다. 디렉토리 끝에서 0이 리턴된다. 에러시, −1이 리턴되며 errno 는 적당한 값으로 설정된다.
EBADF |
유효 하지 않은 파일 기술자 fd. |
||
EFAULT |
인자가 호출 프로세스의 주소 공간외를 가리키고 있다. |
||
EINVAL |
결과 버퍼가 너무 작다. |
||
ENOENT |
해당 디렉토리가 없다. |
ENOTDIR
파일 기술자가 디렉토리를 가리키지 않는다.
이 시스템 콜은 리눅스에 의존한다.
정강훈 <skyeyes AT soback DOT kornet DOT net>, 2000년 8월 7일