std::filesystem::status / symlink_status

std::filesystem::status / symlink_status (파일 상태 얻기)

경로 p가 식별하는 파일시스템 개체의 유형과 속성을 결정하는 함수예요. status는 심볼릭 링크를 따라가고, symlink_status는 링크 자체를 검사해요. C++17부터 있어요.

출처: cppreference

본문

<filesystem> 헤더에 정의돼 있어요.

std::filesystem::file_status status( const std::filesystem::path& p );  // (1) C++17
std::filesystem::file_status status( const std::filesystem::path& p,
                                     std::error_code& ec ) noexcept;   // (2) C++17
std::filesystem::file_status symlink_status( const std::filesystem::path& p ); // (3) C++17
std::filesystem::file_status symlink_status( const std::filesystem::path& p,
                                             std::error_code& ec ) noexcept; // (4) C++17
  • 1,2) POSIX stat처럼(심볼릭 링크는 목표를 따라감) p가 식별하는 개체의 유형과 속성을 결정해요. 다음 설명에서 prms(m & perms::mask)의 결과예요. 여기서 m은 POSIX struct stat에서 st_mode를 얻어 std::filesystem::perms 타입으로 변환한 값이에요.
    • p가 일반 파일이면(POSIX S_ISREG대로) file_status(file_type::regular, prms)를 돌려줘요.
    • p가 디렉터리면(S_ISDIR) file_status(file_type::directory, prms)를 돌려줘요.
    • p가 블록 특수 파일이면(S_ISBLK) file_status(file_type::block, prms)를 돌려줘요.
    • p가 문자 특수 파일이면(S_ISCHR) file_status(file_type::character, prms)를 돌려줘요.
    • p가 FIFO면(S_ISFIFO) file_status(file_type::fifo, prms)를 돌려줘요.
    • p가 소켓이면(S_ISSOCK) file_status(file_type::socket, prms)를 돌려줘요.
    • p가 심볼릭 링크면(S_ISLNK) file_status(file_type::symlink, prms)를 돌려줘요(S_IFLNK 비트는 OS 특정이라 검사하지 않을 수 있음).
    • 그 외에는 file_status(file_type::unknown, prms)를 돌려줘요.
  • 3,4) POSIX lstat처럼(심볼릭 링크를 따라가지 않음) 동작하는 점만 빼고 위와 같아요.

참고

오류가 발생하면 statusfile_type::none을, symlink_statusfile_type::none 또는 file_type::unknown을 담은 file_status를 돌려줘요. 파일이 존재하지 않는 경로에 대해서는 file_type::not_found를 돌려줘요(이건 오류로 간주하지 않아요).

더 알아보기 (Learn more)

cppreference