Manpages

이 름

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는 적 당 한 값 으 로 설 정 된 다 .

에 러

EBADF

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

EFAULT

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

EINVAL

결 과 버 퍼 가 너 무 작 다 .

ENOENT

그 런 디 렉 토 리 가 없 다 .

ENOTDIR

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

호 환

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

관 련 항 목

readdir(2), readdir(3)

역 자

정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 2일