std::experimental::filesystem:: is_character_file
|
Определено в заголовке
<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.
Содержание |
Параметры
| s | - | статус файла для проверки |
| p | - | путь для проверки |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей перегрузке |
Возвращаемое значение
true если файл, указанный в p или если тип, указанный в s относится к блочному устройству, false в противном случае. Перегрузка без генерации исключений возвращает false при возникновении ошибки.
Исключения
Примечания
Информация, предоставляемая этой функцией, обычно также доступна как побочный продукт итерации по каталогу. Во время итерации по каталогу вызов
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
)
|