Namespaces
Variants

std::filesystem:: is_symlink

From cppreference.net
헤더 파일에 정의됨 <filesystem>
bool is_symlink ( std:: filesystem :: file_status s ) noexcept ;
(1) (C++17부터)
bool is_symlink ( const std:: filesystem :: path & p ) ;
(2) (C++17부터)
bool is_symlink ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (C++17부터)

주어진 파일 상태나 경로가 POSIX S_IFLNK 에 의해 결정된 것처럼 심볼릭 링크에 해당하는지 확인합니다.

1) 다음과 동일함: s. type ( ) == file_type :: symlink .
2,3) 다음에 해당함: is_symlink ( symlink_status ( p ) ) 또는 is_symlink ( symlink_status ( p, ec ) ) .

목차

매개변수

s - 확인할 파일 상태
p - 검사할 경로
ec - 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수

반환값

true 를 반환합니다. 만약 파일 경로 p 또는 타입 s 가 심볼릭 링크를 가리키는 경우입니다. 비예외 발생 오버로드는 오류가 발생할 경우 false 를 반환합니다.

예외

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

2,3) OS API 호출이 실패할 경우 std:: error_code & 매개변수를 OS API 오류 코드로 설정하고, 오류가 발생하지 않을 경우 ec. clear ( ) 를 실행합니다.

예제

#include <cstdio>
#include <cstring>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::filesystem;
void demo_status(const fs::path& p, fs::file_status s)
{
    std::cout << p;
    // alternative: switch(s.type()) { case fs::file_type::regular: ...}
    if (fs::is_regular_file(s))
        std::cout << " is a regular file\n";
    if (fs::is_directory(s))
        std::cout << " is a directory\n";
    if (fs::is_block_file(s))
        std::cout << " is a block device\n";
    if (fs::is_character_file(s))
        std::cout << " is a character device\n";
    if (fs::is_fifo(s))
        std::cout << " is a named IPC pipe\n";
    if (fs::is_socket(s))
        std::cout << " is a named IPC socket\n";
    if (fs::is_symlink(s))
        std::cout << " is a symlink\n";
    if (!fs::exists(s))
        std::cout << " does not exist\n";
}
int main()
{
    // create files of different kinds
    fs::create_directory("sandbox");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // create regular file
    fs::create_symlink("file", "sandbox/symlink");
    mkfifo("sandbox/pipe", 0644);
    sockaddr_un addr;
    addr.sun_family = AF_UNIX;
    std::strcpy(addr.sun_path, "sandbox/sock");
    int fd = socket(PF_UNIX, SOCK_STREAM, 0);
    bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr);
    // demo different status accessors
    for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // use cached status from directory entry
    demo_status("/dev/null", fs::status("/dev/null")); // direct calls to status
    demo_status("/dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // cleanup (prefer std::unique_ptr-based custom deleters)
    close(fd);
    fs::remove_all("sandbox");
}

가능한 출력:

"sandbox/file" is a regular file
"sandbox/dir" is a directory
"sandbox/pipe" is a named IPC pipe
"sandbox/sock" is a named IPC socket
"sandbox/symlink" is a symlink
"/dev/null" is a character device
"/dev/sda" is a block device
"sandbox/no" does not exist

참고 항목

(C++17) (C++17)
파일 속성을 결정함
심볼릭 링크 대상을 확인하며 파일 속성을 결정함
(함수)
파일 유형과 권한을 나타냄
(클래스)
파일 상태가 알려져 있는지 확인함
(함수)
주어진 경로가 블록 장치를 참조하는지 확인함
(함수)
주어진 경로가 문자 장치를 참조하는지 확인함
(함수)
주어진 경로가 디렉터리를 참조하는지 확인함
(함수)
(C++17)
주어진 경로가 명명된 파이프를 참조하는지 확인함
(함수)
(C++17)
인수가 기타 파일을 참조하는지 확인함
(함수)
인수가 일반 파일을 참조하는지 확인함
(함수)
(C++17)
인수가 명명된 IPC 소켓을 참조하는지 확인함
(함수)
(C++17)
경로가 존재하는 파일 시스템 객체를 참조하는지 확인함
(함수)
디렉터리 항목이 심볼릭 링크를 참조하는지 확인함
( std::filesystem::directory_entry 의 공개 멤버 함수)