Scroll to navigation

GETDENTS(2) 리눅스 프로그래머 메뉴얼 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);

설명

getdentsfd가 가리키는 디렉토리에서 여러 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는 적당한 값으로 설정된다.

에러

유효하지 않은 파일 기술자 fd.
인자가 호출한 프로세스의 주소 공간을 벗어난 곳을 가리킨다.
결과 버퍼가 너무 작다.
그런 디렉토리가 없다.
파일 기술자가 디렉토리를 참조하고 있지 않다.

호환

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

관련 항목

readdir(2), readdir(3)

역자

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

1995년 7월 22일 리눅스 1.3.6