GETDENTS(2)

이름
getdents - 디렉토리 엔트리를 가져온다.

사용법
#include <unistd.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>

_syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count);

int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);

설명
getdents는 fd가 가리키는 디렉토리에서 여러 dirent 구조체을 읽어와 dirp가 가리키는 메모리 공간에 저장한다. count 인자는 메모리 공간의 크기이다.

dirent 구조체는 다음과 같다:

    struct dirent
    {
        long d_ino;                 /* inode 번호 */
        off_t d_off;                /* 다음 dirent에 대한 옵셋 */
        unsigned short d_reclen;    /* 이 dirent의 길이 */
        char d_name [NAME_MAX+1];   /* (null로 끝나는) 파일 이름 */
    }

d_ino는 inode 번호이다. d_off는 현재 디렉토리 시작부터 다음 dirent 시작 까지의 옵셋(offset)이다. d_reclen는 이 dirent의 전체 크기이다. d_name는 null로 끝나는 파일 이름이다.

이 시스템 콜은 readdir(2)를 대체한다.

반환값
성공시, 읽은 바이트의 수가 리턴된다. 디렉토리의 끝에서, 0이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다.

에러

EBADF
    유효하지 않은 파일 기술자 fd.

EFAULT
    인자가 호출한 프로세스의 주소 공간을 벗어난 곳을 가리킨다.

EINVAL
    결과 버퍼가 너무 작다.

ENOENT
    그런 디렉토리가 없다.

ENOTDIR
    파일 기술자가 디렉토리를 참조하고 있지 않다.

호환
SVr4, SVID. SVr4 문서에서는 ENOLINK, EIO 에러 상태가 추가되있다.

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

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