READDIR(2)

이름
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
    파일 기술자가 디렉토리를 가리키지 않는다.

호환
이 시스템 콜은 리눅스에 의존한다.

관련 항목
getdents(2), readdir(3)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 8월 7일