GETDIRENTRIES(2)

명칭
getdirentries, getdents - 파일 시스템에 독립인 포맷의 디렉토리 엔트리를 취득한다

프로그램 라이브러리
libc

서식
<sys/types.h> <dirent.h> int getdirentries(int fd, char *buf, int nbytes, long *basep) int getdents(int fd, char *buf, int nbytes)

해설
getdirentries() 함수와 getdents() 함수는, 파일 기술자 fd 하지만 참조하는 디렉토리로부터 buf 하지만 가리키는 버퍼내에, 파일 시스템에 독립인 포맷의 디렉토리 엔트리를 읽기. 최고로 nbytes 까지의 데이터가 전송 됩니다. nbytes 인수는, 파일에 대응하는 블록 사이즈 이상일 필요가 있습니다. stat(2) (을)를 참조해 주세요. 이 사이즈보다 작은 버퍼에서는, 이러한 함수를 서포트하지 않을 가능성이 있는 파일 시스템이 있습니다.

버퍼내의 데이터는 dirent 구조체의 연속으로, 각각 다음의 엔트리가 들어가 있습니다.

    u_int32_t d_fileno;
    u_int16_t d_reclen;
    u_int8_t  d_type;
    u_int8_t  d_namlen;
    char	d_name[MAXNAMELEN + 1];	/* 아래와 같이를 참조 */

d_fileno 엔트리는, 파일 시스템내가 다른 파일마다 일의의 수치입니다. 하드 링크로 링크 된 파일 (link(2) (을)를 참조)는 같다 d_fileno (을)를 가집니다. d_reclen 엔트리는, 디렉토리 레코드의 길이 (바이트 단위)입니다. d_type 엔트리는, 디렉토리 레코드가 가리키는 파일의 타입입니다. 파일 타입의 값은 <sys/dirent.h> 안에 정의됩니다. d_name 엔트리에는 눌로 종단 된 파일명이 들어가 있습니다. d_namlen 엔트리는, 누르바이트를 제외한 파일명의 길이를 나타냅니다. 그러므로, d_name 의 실제의 사이즈는 1 으로부터 MAXNAMELEN + 1 의 사이의 몇개의 값이 됩니다.

엔트리는 여분의 스페이스에서 분리되어 있을지도 모릅니다. d_reclen 엔트리는, dirent 구조체의 개시점으로부터 다음의 구조체 (이)가 있는 경우는 그 구조체에의 오프셋(offset)로서 사용됩니다.

실제로 전송 된 바이트수가 돌려주어집니다. fd 에 관련 지을 수 있었던 현재의 위치를 나타내는 포인터는, 엔트리의 다음의 블록으로 설정됩니다. 포인터는 getdirentries() 또는 getdents() 에 의해 돌려주어지는 바이트 몇분만큼 진행된다고는 할 수 없습니다. 디렉토리의 끝나에 도달했을 경우는, 값 0 이 돌려주어집니다.

getdirentries() 함수는, 읽힌 블록 위치를 basep 하지만 가리키는 장소에 기록. 대신에 lseek(2) 에 의해 현재의 위치 포인터를 설정, 취득할 수 있습니다. 현재의 위치 포인터는, lseek(2) 하지만 돌려주는 값, basep 하지만 가리키는 장소에 돌려주어지는 값 (getdirentries() 마셔), 또는 0 의 어느 쪽인가에 마셔 설정해야 합니다.

반환값
처리가 정상적으로 완료하면(자), 실제로 전송 된 바이트수가 돌려주어집니다. 그렇지 않은 경우는 -1 이 돌려주어져 에러를 나타내기 위해서(때문에) 글로벌 변수 errno 하지만 설정됩니다.

에러
getdirentries() (은)는 다음의 경우에 실패합니다.

[EBADF]
    fd 하지만 읽기용으로 열린 유효한 파일 기술자가 아닙니다.

[EFAULT]
    buf 또는 basep 의 어느 쪽인지가, 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.

[EINVAL]
    fd 에 의해 참조되는 파일이 디렉토리가 아닌지, nbytes 하지만 디렉토리 엔트리 또는 엔트리의 블록을 돌려주는데는 너무 작습니다. 혹은, 현재의 위치 포인터가 무효입니다.

[EIO]
    파일 시스템에 읽고 쓰기하고 있는 동안에 I/O (입출력) 에러가 발생했습니다.

관련 항목
lseek(2), open(2)

역사
getdirentries() 함수는 4.4BSD 그리고 처음 등장했습니다. getdents() 함수는 FreeBSD 3.0 그리고 처음 등장했습니다.