std::experimental::filesystem:: is_symlink
|
Определено в заголовочном файле
<experimental/filesystem>
|
||
|
bool
is_symlink
(
file_status s
)
;
|
(1) | (filesystem TS) |
|
bool
is_symlink
(
const
path
&
p
)
;
bool is_symlink ( const path & p, error_code & ec ) ; |
(2) | (filesystem TS) |
Проверяет, соответствует ли данный статус файла или путь символической ссылке, как если бы это определялось POSIX S_IFLNK .
Содержание |
Параметры
| s | - | статус файла для проверки |
| p | - | путь для проверки |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей перегрузке |
Возвращаемое значение
true если файл, указанный в p или если тип, указанный в s является символической ссылкой. Перегрузка без генерации исключений возвращает false при возникновении ошибки.
Исключения
Примечания
Информация, предоставляемая этой функцией, обычно также доступна как побочный продукт итерации по каталогу. Во время итерации по каталогу вызов
is_symlink(*iterator)
менее эффективен, чем
is_symlink(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; // альтернатива: switch(s.type()) { case fs::file_type::regular: ... } if (fs::is_regular_file(s)) std::cout << " является обычным файлом\n"; if (fs::is_directory(s)) std::cout << " является директорией\n"; if (fs::is_block_file(s)) std::cout << " является блочным устройством\n"; if (fs::is_character_file(s)) std::cout << " является символьным устройством\n"; if (fs::is_fifo(s)) std::cout << " является именованным IPC-каналом\n"; if (fs::is_socket(s)) std::cout << " является именованным IPC-сокетом\n"; if (fs::is_symlink(s)) std::cout << " является символьной ссылкой\n"; if (!fs::exists(s)) std::cout << " не существует\n"; } int main() { // создание файлов различных типов fs::create_directory("sandbox"); std::ofstream("sandbox/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"); // демонстрация различных методов доступа к статусу for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // использование кэшированного статуса из записи директории demo_status("dev/null", fs::status("/dev/null")); // прямые вызовы status demo_status("dev/sda", fs::status("/dev/sda")); demo_status("sandbox/no", fs::status("/sandbox/no")); // очистка close(fd); fs::remove_all("sandbox"); }
Возможный вывод:
"sandbox/file" является обычным файлом "sandbox/dir" является директорией "sandbox/pipe" является именованным IPC-каналом "sandbox/sock" является именованным IPC-сокетом "sandbox/symlink" является символьной ссылкой "dev/null" является символьным устройством "dev/sda" является блочным устройством "sandbox/no" не существует
Смотрите также
|
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки (функция) |
|
|
представляет тип файла и права доступа
(класс) |
|
|
проверяет, известен ли статус файла
(функция) |
|
|
проверяет, ссылается ли данный путь на блочное устройство
(функция) |
|
|
проверяет, ссылается ли данный путь на символьное устройство
(функция) |
|
|
проверяет, ссылается ли данный путь на директорию
(функция) |
|
|
проверяет, ссылается ли данный путь на именованный канал
(функция) |
|
|
проверяет, ссылается ли аргумент на
другой
тип файла
(функция) |
|
|
проверяет, ссылается ли аргумент на обычный файл
(функция) |
|
|
проверяет, ссылается ли аргумент на именованный IPC-сокет
(функция) |
|
|
проверяет, ссылается ли путь на существующий объект файловой системы
(функция) |
|
|
кэшированный статус файла, обозначенного этой записью директории
кэшированный symlink_status файла, обозначенного этой записью директории (публичная функция-член
std::experimental::filesystem::directory_entry
)
|