IT이야기

readdir()는 주문을 보증합니까?

cyworld 2022. 7. 3. 10:14
반응형

readdir()는 주문을 보증합니까?

opendir/readdir를 사용하여 Linux와 같은 시스템의 파일 목록을 가져옵니다.디렉토리 엔트리는 파일명의 알파벳 순서로 반환되는 것처럼 보입니다.그러나 man 페이지에는 이 주문이 보증되는 내용이 없습니다.

누가 주문서를 읽어줄지 말해줄 수 있나요?

readdir방법은 순서를 보증하지 않습니다.알파벳 순으로 정렬하려면 사용자가 직접 정렬해야 합니다.

주의: 이 경우라고 하는 확실한 문서를 검색했습니다.제가 가장 가까이 온 곳은 다음 링크입니다.

명확한 것은 아니지만 명령어, 명령어 이력, 일반적인 트래버설 순서 구현 방법에 대한 개요를 알 수 있습니다.

"Linux 프로그래밍 인터페이스"에서:

에 의해 반환된 파일 이름readdir()는, 정렬 순서가 아니고, 디렉토리내에서 발생하는 순서입니다(이것은, 파일 시스템이 디렉토리에 파일을 추가하는 순서와 파일이 삭제된 후의 디렉토리 리스트의 갭을 메우는 방법에 의해서 다릅니다).(명령어)ls –f에 의해 취득되는 것과 같은 정렬되지 않은 순서로 파일을 나타냅니다.readdir().)

이 함수를 사용하여 프로그래머 정의 기준과 일치하는 정렬된 파일 목록을 검색할 수 있습니다. 자세한 내용은 설명서 페이지를 참조하십시오.SUSv3에는 명시되어 있지 않지만,scandir()는 대부분의 UNIX 구현에서 제공됩니다.

주의: scandir는 POSIX.1-2008의 일부입니다.다음에 정의되어 있는 허가 가능한 복사된 버전readdirFreeB에서 이용 가능SD libc.

아니요, readdir는 어떤 주문도 보장하지 않습니다.

(일부 파일시스템에서는 디렉토리 엔트리를 특정 순서로 저장할 수 있습니다.이 경우 readdir는 같은 순서로 반환할 수 있지만 readdir 자체의 기능은 아닙니다.

즉, readdir()는 특정 순서를 보증하지 않습니다.

glibc 매뉴얼의 readdir 예에서

디렉토리에 파일이 표시되는 순서는 매우 랜덤한 경향이 있습니다.보다 유용한 프로그램은 엔트리를 인쇄하기 전에 (아마도 알파벳 순으로) 정렬합니다.

확실히 보장되지 않습니다.순서는 몇 가지 규칙을 따르는 경우가 많지만 규칙이 복잡하기 때문에 신뢰할 수 없습니다.예를 들어, 순서는 같은 디렉토리에서 발생하는 다른 조작의 영향을 받을 수 있으며, 사용자는 이러한 작업을 제어할 수 없습니다.주문은 랜덤으로 취급하고 필요에 따라 직접 분류합니다.

readdir()에서는 OS 디스크 읽기 순서보다 높은 순서는 보증되지 않습니다.


일부 플랫폼(Solaris - sun4sol, x86 sol, linux, Windows)에서 실시한 테스트 결과, 모든 결과가 랜덤하게 표시되었습니다.


소스: 파일이 아닌 점으로 시작하는 readdir()

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main() {

    DIR *dir;
    struct dirent *dp;
    char * file_name;
    char dirpath [100] ;


    while(1==1){
        printf("Choose dir:");
        scanf("%s",dirpath);
        dir = opendir(dirpath);
        while ((dp=readdir(dir)) != NULL) {
            if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") )
            {
                // do nothing (straight logic)
            } else {
                file_name = dp->d_name; // use it
                printf("file_name: \"%s\"\n",file_name);
            }
        }
        closedir(dir);
    }

    return 0;
}

다른 답변과 더불어 readdir man 페이지는 파일 주문에 대해 매우 명확합니다.

readdir()에 대한 연속 호출에 의해 파일 이름이 읽히는 순서는 파일 시스템 구현에 따라 달라집니다.이러한 이름이 정렬되는 일은 거의 없습니다.

라이저와 같은 일부 파일 시스템FS는 파일을 사전순으로 나열한다.

이 경우 이름을 배열에 저장한 다음 배열을 정렬해야 합니다.

예를 들어 qsort()를 사용하여 배열을 정렬합니다.

언급URL : https://stackoverflow.com/questions/8977441/does-readdir-guarantee-an-order

반응형