Namespaces
Variants

std::filesystem:: equivalent

From cppreference.net
헤더 파일에 정의됨 <filesystem>
bool equivalent ( const std:: filesystem :: path & p1,
const std:: filesystem :: path & p2 ) ;
(1) (C++17 이후)
bool equivalent ( const std:: filesystem :: path & p1,

const std:: filesystem :: path & p2,

std:: error_code & ec ) noexcept ;
(2) (C++17 이후)

경로 p1 p2 가 동일한 파일 시스템 엔터티로 확인되는지 검사합니다.

만약 p1 또는 p2 중 하나가 존재하지 않으면 오류가 보고됩니다.

비예외 오버로드는 오류 발생 시 false 를 반환합니다.

목차

매개변수

p1, p2 - 동등성을 확인할 경로
ec - non-throwing 오버로드에서 오류 보고를 위한 출력 매개변수

반환값

true 만약 p1 p2 가 동일한 파일이나 디렉토리를 참조하고 파일 상태가 동일한 경우. false 그렇지 않은 경우.

예외

noexcept 로 표시되지 않은 모든 오버로드는 메모리 할당이 실패할 경우 std::bad_alloc 을(를) throw할 수 있습니다.

1) 기본 OS API 오류 발생 시 std::filesystem::filesystem_error 를 발생시킵니다. 이는 p1 을 첫 번째 경로 인수로, p2 을 두 번째 경로 인수로, OS 오류 코드를 오류 코드 인수로 사용하여 구성됩니다.
2) OS API 호출이 실패할 경우 std:: error_code & 매개변수를 OS API 오류 코드로 설정하고, 오류가 발생하지 않을 경우 ec. clear ( ) 를 실행합니다.

참고 사항

두 경로가 동일한 파일 시스템 엔티티로 확인되려면, 경로들이 확인되는 두 후보 엔티티가 동일한 장치의 동일한 위치에 있어야 합니다. POSIX의 경우, 이는 POSIX stat 구조체 st_dev st_ino 멤버가 POSIX stat() 을 통해 얻은 것처럼 동일함을 의미합니다.

특히, 동일한 파일 또는 디렉터리에 대한 모든 하드 링크는 동등하며, 동일한 파일 시스템 상의 심볼릭 링크와 그 대상은 동등합니다.

예제

#include <cstdint>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    // 하드 링크 동등성
    fs::path p1 = ".";
    fs::path p2 = fs::current_path();
    if (fs::equivalent(p1, p2))
        std::cout << p1 << " is equivalent to " << p2 << '\n';
    // 심볼릭 링크 동등성
    for (const fs::path lib : {"/lib/libc.so.6", "/lib/x86_64-linux-gnu/libc.so.6"})
    {
        try
        {
            p2 = lib.parent_path() / fs::read_symlink(lib);
        }
        catch (std::filesystem::filesystem_error const& ex)
        {
            std::cout << ex.what() << '\n';
            continue;
        }
        if (fs::equivalent(lib, p2))
            std::cout << lib << " is equivalent to " << p2 << '\n';
    }
}

가능한 출력:

"." is equivalent to "/var/tmp/test"
filesystem error: read_symlink: No such file or directory [/lib/libc.so.6]
"/lib/x86_64-linux-gnu/libc.so.6" is equivalent to "/lib/x86_64-linux-gnu/libc-2.23.so"

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2937 C++17 오류 조건이 잘못 지정됨 수정됨

참고 항목

두 경로의 어휘 표현을 사전식으로 비교합니다
( std::filesystem::path 의 public member function)
(C++17) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++20)
두 경로를 사전식으로 비교합니다
(function)
(C++17) (C++17)
파일 속성을 결정합니다
심링크 대상을 확인하여 파일 속성을 결정합니다
(function)