이 름
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 에 러 상 태 가 추 가 되 있 다 .
관 련 항 목
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 2일