Namespaces
Variants

std::filesystem:: is_fifo

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

주어진 파일 상태나 경로가 POSIX S_ISFIFO 에 의해 결정된 것처럼 FIFO 또는 파이프 파일에 해당하는지 확인합니다.

1) 다음과 동일함: s. type ( ) == file_type :: fifo .
2,3) 다음에 해당합니다: is_fifo ( status ( p ) ) 또는 is_fifo ( status ( p, ec ) ) 각각.

목차

매개변수

s - 확인할 파일 상태
p - 조회할 경로
ec - 오류 발생 시 수정할 에러 코드

반환값

true 만약 p 로 지정된 파일 또는 s 로 지정된 타입이 FIFO 파이프를 참조하는 경우, false 그렇지 않은 경우. 비예외 발생 오버로드는 오류 발생 시 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)
인수가 명명된 IPC 소켓을 참조하는지 확인함
(함수)
(C++17)
인수가 심볼릭 링크를 참조하는지 확인함
(함수)
(C++17)
경로가 기존 파일 시스템 객체를 참조하는지 확인함
(함수)
디렉터리 엔트리가 명명된 파이프를 참조하는지 확인함
( std::filesystem::directory_entry 의 public 멤버 함수)