std::experimental::filesystem:: is_block_file
|
Определено в заголовке
<experimental/filesystem>
|
||
|
bool
is_block_file
(
file_status s
)
;
|
(1) | (filesystem TS) |
|
bool
is_block_file
(
const
path
&
p
)
;
bool is_block_file ( const path & p, error_code & ec ) noexcept ; |
(2) | (filesystem TS) |
Проверяет, соответствует ли данный статус файла или путь блочному специальному файлу, как если бы это определялось POSIX S_ISBLK . Примерами блочных специальных файлов являются блочные устройства, такие как / dev / sda или / dev / loop0 в Linux.
Содержание |
Параметры
| s | - | статус файла для проверки |
| p | - | путь для проверки |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей перегрузке |
Возвращаемое значение
true если файл, указанный в p или если тип, указанный в s относится к блочному устройству. Перегрузка без генерации исключений возвращает false при возникновении ошибки.
Исключения
Примечания
Информация, предоставляемая этой функцией, обычно также доступна как побочный продукт итерации по каталогу. Во время итерации по каталогу вызов
is_block_file(*iterator)
менее эффективен, чем
is_block_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
)
|