Namespaces
Variants

std::experimental::filesystem:: is_character_file

From cppreference.net
헤더 파일에 정의됨 <experimental/filesystem>
bool is_character_file ( file_status s ) ;
(1) (filesystem TS)
bool is_character_file ( const path & p ) ;
bool is_character_file ( const path & p, error_code & ec ) ;
(2) (filesystem TS)

주어진 파일 상태나 경로가 POSIX S_ISCHR 에 의해 결정된 것처럼 문자 특수 파일에 해당하는지 확인합니다. 문자 특수 파일의 예로는 Linux에서 / dev / null , / dev / tty , / dev / audio , 또는 / dev / nvram 와 같은 문자 장치들이 있습니다.

1) 다음과 동일함: s. type ( ) == file_type :: character .
2) 다음에 해당함: is_character_file ( status ( p ) ) 또는 is_character_file ( status ( p, ec ) ) 각각.

목차

매개변수

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

반환값

true 만약 p 로 지정된 파일 또는 s 로 지정된 타입이 블록 장치를 참조하는 경우, false 그렇지 않은 경우. 비예외 발생 오버로드는 오류 발생 시 false 를 반환합니다.

예외

1)
noexcept 명세:
noexcept
2) error_code & 매개변수를 받지 않는 오버로드는 기본 OS API 오류 시 filesystem_error 를 발생시키며, 첫 번째 인수로 p 를, 오류 코드 인수로 OS 오류 코드를 사용하여 구성됩니다. std:: bad_alloc 는 메모리 할당이 실패할 경우 발생할 수 있습니다. error_code & 매개변수를 받는 오버로드는 OS API 호출이 실패할 경우 이를 OS API 오류 코드로 설정하고, 오류가 발생하지 않으면 ec. clear ( ) 를 실행합니다. 이 오버로드는
noexcept 사양을 가집니다:
noexcept

참고 사항

이 함수가 제공하는 정보는 일반적으로 디렉터리 순회의 부산물로도 제공됩니다. 디렉터리 순회 중에는 is_character_file(*iterator) 를 호출하는 것이 is_character_file(iterator->status()) 를 호출하는 것보다 효율성이 낮습니다.

예제

#include <cstdio>
#include <cstring>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::experimental::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");
    std::ofstream("sandbox/file"); // create regular file
    fs::create_directory("sandbox/dir");
    mkfifo("sandbox/pipe", 0644);
    struct 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, (struct sockaddr*)&addr, sizeof addr);
    fs::create_symlink("file", "sandbox/symlink");
    // 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
    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

참고 항목

파일 속성을 결정함
심볼릭 링크 대상을 확인하여 파일 속성을 결정함
(함수)
파일 타입과 권한을 나타냄
(클래스)
파일 상태가 알려져 있는지 확인함
(함수)
주어진 경로가 블록 장치를 참조하는지 확인함
(함수)
주어진 경로가 디렉토리를 참조하는지 확인함
(함수)
주어진 경로가 명명된 파이프를 참조하는지 확인함
(함수)
인수가 기타 파일을 참조하는지 확인함
(함수)
인수가 일반 파일을 참조하는지 확인함
(함수)
인수가 명명된 IPC 소켓을 참조하는지 확인함
(함수)
인수가 심볼릭 링크를 참조하는지 확인함
(함수)
경로가 존재하는 파일 시스템 객체를 참조하는지 확인함
(함수)
이 디렉토리 엔트리가 지정하는 파일의 캐시된 상태
이 디렉토리 엔트리가 지정하는 파일의 캐시된 symlink_status
( std::experimental::filesystem::directory_entry 의 public 멤버 함수)