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은 POSIXstruct stat에서st_mode를 얻어std::filesystem::perms타입으로 변환한 값이에요.p가 일반 파일이면(POSIXS_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처럼(심볼릭 링크를 따라가지 않음) 동작하는 점만 빼고 위와 같아요.
참고
오류가 발생하면 status는 file_type::none을, symlink_status는 file_type::none 또는 file_type::unknown을 담은 file_status를 돌려줘요. 파일이 존재하지 않는 경로에 대해서는 file_type::not_found를 돌려줘요(이건 오류로 간주하지 않아요).