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 . Примерами символьных специальных файлов являются символьные устройства, такие как / dev / null , / dev / tty , / dev / audio или / dev / nvram в Linux.

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 & , выбрасывает исключение filesystem_error при ошибках базового API ОС, создавая его с p в качестве первого аргумента и кодом ошибки ОС в качестве аргумента кода ошибки. std:: bad_alloc может быть выброшено при неудачном выделении памяти. Перегрузка, принимающая параметр error_code & , устанавливает его в код ошибки API ОС при сбое вызова 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 )