readdir_r 예제

readdir_r() 함수는 빈 이름을 포함하는 디렉터리 항목을 반환하지 않습니다. 오픈 그룹 코리건덤 U026/7이 적용되어 readdir_r()에 대한 프로토타입을 수정합니다. POSIX.1은 d_name 필드의 크기를 지정하지 않으며 다른 비표준 필드가 디렌트 구조 내의 해당 필드 앞에 있을 수 있기 때문에 readdir_r()을 사용하는 이식 가능한 응용 프로그램은 다음과 같이 항목에서 주소가 전달되는 버퍼를 할당해야 합니다. _THREAD_SAFE_FUNCTIONS가 정의되고 readdir_r() dirp에서 참조하는 디렉터리 스트림의 현재 위치에 있는 디렉토리 항목으로 입력하여 참조되는 디렌트 구조를 초기화하고 결과적으로 이 구조에 대한 포인터를 저장합니다. readdir_r() 함수는 스레드 안전 기능 옵션의 일부로 표시됩니다. readdir_r() 함수는 스레드에서 사용할 수 있으며 각 호출에서 덮어쓸 수 있는 정적 데이터 영역을 사용하는 대신 사용자가 제공한 버퍼에서 값을 반환해야 합니다. readdir_r() 함수는 성공 시 0을 반환합니다. 오류시, 그것은 긍정적 인 오류 번호 (오류 아래에 나열)를 반환합니다. 디렉터리 스트림의 끝에 도달하면 readdir_r()이 0을 반환하고 NULL을 *result로 반환합니다. readdir_r() 함수는 readdir()의 재진입 버전입니다. 디렉터리 스트림 dirp에서 다음 디렉터리 항목을 읽고 항목별로 가리키는 호출자 할당 버퍼에서 반환합니다. 이 버퍼 할당에 대한 자세한 내용은 메모를 참조하십시오. 반환 된 항목에 대 한 포인터는 *결과에 배치 됩니다.

디렉터리 스트림의 끝이 발생하면 NULL이 대신 *result로 반환됩니다. 열려 있는 동안 디렉터리변경되었음을 나타내는 오류 또는 신호가 고려되었지만 거부되었습니다. . readdir() 함수는 재진입할 필요가 없습니다. 재진입할 필요가 없는 함수는 스레드가 안전하지 않을 필요가 없습니다. Linux에서 디렌트 구조는 다음과 같이 정의됩니다. 이 문제를 보다 직접적으로 처리하는 루틴이 제안되었습니다. . . 항목의 이름이 기호 링크인 경우 d_ino 멤버의 값은 지정되지 않습니다. readdir()에 의해 반환된 포인터는 동일한 디렉터리 스트림에서 readdir()에 대한 다른 호출로 덮어쓸 수 있는 데이터를 가리킵니다. 이 데이터는 다른 디렉터리 스트림에서 readdir()에 대한 다른 호출에 의해 덮어쓰지 않습니다.

항목이 기호 링크를 참조할 때 구조체 디렌트의 특정 필드의 처리를 나타내는 명령문이 설명에 추가됩니다. readdir()는 오류를 감지하고 디렉터리 끝이 발생하면 NULL을 반환하므로 차이를 알려야 하는 응용 프로그램은 호출 전에 errno를 0으로 설정하고 NULL이 반환되었는지 확인해야 합니다. 함수는 두 번째 경우에 errno를 변경하지 않아야 하며 첫 번째 경우0이 아닌 값으로 설정해야 하므로 NULL을 반환하는 호출 후 0 errno는 디렉토리 끝을 나타냅니다. 그렇지 않으면 오류가 발생합니다. readdir() 함수는 dirp가 가리키는 디렉터리 스트림의 다음 디렉터리 항목을 나타내는 디렌트 구조에 대한 포인터를 반환합니다. 디렉터리 스트림의 끝에 도달하거나 오류가 발생한 경우 NULL을 반환합니다. Linux 이외에 d_type 필드는 주로 BSD 시스템에서만 사용할 수 있습니다. 이 필드를 사용하면 추가 작업이 파일 유형에 따라 달라지면 lstat(2)를 호출하는 비용을 피할 수 있습니다. _BSD_SOURCE 기능 테스트 매크로가 정의된 경우 glibc는 d_type에서 반환되는 값에 대해 다음 매크로 상수를 정의합니다: readdir() 함수는 빈 이름을 포함하는 디렉터리 항목을 반환하지 않습니다. 점 또는 점 점에 대한 항목이 있는 경우 점에 대해 하나의 항목이 반환되고 한 항목은 점 점에 대해 반환됩니다. 그렇지 않으면 반환되지 않습니다.

다음 샘플 프로그램은 명령줄에 제공된 각 인수에 대해 현재 디렉터리를 검색합니다.

2nd August 2019 Uncategorized