Главная Новости Галерея Вопросы Библиотека Контакты

readdir_r 예제

readdir_r() 함수는 readdir()의 재진입 버전입니다. 디렉터리 스트림 dirp에서 다음 디렉터리 항목을 읽고 항목별로 가리키는 호출자 할당 버퍼에서 반환합니다. 이 버퍼 할당에 대한 자세한 내용은 메모를 참조하십시오. 반환 된 항목에 대 한 포인터는 *결과에 배치 됩니다. 디렉터리 스트림의 끝이 발생하면 NULL이 대신 *result로 반환됩니다. readdir_r() 함수는 스레드에서 사용할 수 있으며 각 호출에서 덮어쓸 수 있는 정적 데이터 영역을 사용하는 대신 사용자가 제공한 버퍼에서 값을 반환해야 합니다. readdir_r() 함수는 스레드 안전 기능 옵션의 일부로 표시됩니다. readdir_r() 함수는 성공 시 0을 반환합니다. 오류시, 그것은 긍정적 인 오류 번호 (오류 아래에 나열)를 반환합니다. 디렉터리 스트림의 끝에 도달하면 readdir_r()이 0을 반환하고 NULL을 *result로 반환합니다. _POSIX_THREAD_SAFE_FUNCTIONS가 정의된 경우 readdir_r() dirp이 참조하는 디렉터리 스트림의 현재 위치에 있는 디렉토리 항목으로 항목으로 참조되는 디렌트 구조를 초기화하고 결과적으로 이 구조에 대한 포인터를 저장합니다.

POSIX.1은 d_name 필드의 크기를 지정하지 않으며 다른 비표준 필드가 디렌트 구조 내의 해당 필드 앞에 있을 수 있기 때문에 readdir_r()을 사용하는 이식 가능한 응용 프로그램은 다음과 같이 항목에서 주소가 전달되는 버퍼를 할당해야 합니다. 그룹 코리건덤 U026/7이 적용되어 readdir_r()에 대한 프로토타입을 수정합니다. readdir_r() 함수는 빈 이름을 포함하는 디렉터리 항목을 반환하지 않습니다. 열려 있는 동안 디렉터리변경되었음을 나타내는 오류 또는 신호가 고려되었지만 거부되었습니다. 디렉터리 읽기 함수의 스레드 안전 버전은 각 호출에서 덮어쓸 수 있는 정적 데이터 영역을 사용하는 대신 사용자가 제공한 버퍼에서 값을 반환합니다. {NAME_MAX} 컴파일 타임 상수 또는 해당 pathconf() 옵션을 사용하여 반환된 경로 이름의 최대 크기를 결정할 수 있습니다. 응용 프로그램 사용 섹션은 스레드 안전 함수에 대한 메모와 정적 데이터 영역을 사용하지 않을 수 있도록 업데이트됩니다. 항목의 이름이 기호 링크인 경우 d_ino 멤버의 값은 지정되지 않습니다. [EOVERFLOW] 필수 오류 조건이 추가됩니다. 이 변경 사항은 대용량 파일을 지원하는 것입니다. readdir()에 의해 반환된 포인터는 동일한 디렉터리 스트림에서 readdir()에 대한 다른 호출로 덮어쓸 수 있는 데이터를 가리킵니다.

이 데이터는 다른 디렉터리 스트림에서 readdir()에 대한 다른 호출에 의해 덮어쓰지 않습니다. . readdir() 함수는 인수 dirp에 의해 지정된 디렉터리 스트림의 현재 위치에서 디렉터리 항목을 나타내는 구조에 대한 포인터를 반환하고 다음 항목에 디렉터리 스트림을 배치합니다. 디렉터리 스트림의 끝에 도달하면 null 포인터를 반환합니다. 헤더에 정의된 구조 디렌트는 디렉터리 항목을 설명합니다. . . readdir()는 오류를 감지하고 디렉터리 끝이 발생하면 NULL을 반환하므로 차이를 알려야 하는 응용 프로그램은 호출 전에 errno를 0으로 설정하고 NULL이 반환되었는지 확인해야 합니다. 함수는 두 번째 경우에 errno를 변경하지 않아야 하며 첫 번째 경우0이 아닌 값으로 설정해야 하므로 NULL을 반환하는 호출 후 0 errno는 디렉토리 끝을 나타냅니다. 그렇지 않으면 오류가 발생합니다. 필드 d_name 및 d_ino만 POSIX.1-2001에 지정됩니다. 나머지 필드는 여러 시스템에서 사용할 수 있지만 모든 시스템에서 사용할 수 있는 것은 아닙니다.

글리브에서 프로그램은 매크로 _DIRENT_HAVE_D_NAMLEN, _DIRENT_HAVE_D_RECLEN, _DIRENT_HAVE_D_OFF 또는 _DIRENT_HAVE_D_TYPE이 정의된지 여부를 테스트하여 POSIX.1에 정의되지 않은 필드의 가용성을 확인할 수 있습니다.