Namespaces
Variants

std::experimental::filesystem:: is_socket

From cppreference.net
Определено в заголовочном файле <experimental/filesystem>
bool is_socket ( file_status s ) ;
(1) (filesystem TS)
bool is_socket ( const path & p ) ;
bool is_socket ( const path & p, error_code & ec ) ;
(2) (filesystem TS)

Проверяет, соответствует ли заданный статус файла или пути именованному IPC-сокету, как если бы это определялось с помощью POSIX S_IFSOCK .

1) Эквивалентно s. type ( ) == file_type :: socket .
2) Эквивалентно is_socket ( status ( p ) ) или is_socket ( status ( p, ec ) ) .

Содержание

Параметры

s - статус файла для проверки
p - путь для проверки
ec - выходной параметр для сообщения об ошибках в непорождающей перегрузке

Возвращаемое значение

true если файл, указанный в p или если тип, указанный в s ссылается на именованный сокет. Перегрузка без генерации исключений возвращает false при возникновении ошибки.

Исключения

1)
noexcept спецификация:
noexcept
2) Перегрузка, которая не принимает параметр error_code & , выбрасывает исключение filesystem_error при ошибках базового API ОС, конструируемое с p в качестве первого аргумента и кодом ошибки ОС в качестве аргумента error code. std:: bad_alloc может быть выброшено при неудачном выделении памяти. Перегрузка, принимающая параметр error_code & , устанавливает его в код ошибки API ОС при сбое вызова API ОС и выполняет ec. clear ( ) при отсутствии ошибок. Данная перегрузка имеет
noexcept спецификацию:
noexcept

Примечания

Именованные сокеты — это сокеты домена UNIX, созданные с помощью socket и bind POSIX API, которые могут использоваться для расширенного межпроцессного взаимодействия. В частности, они могут применяться для передачи открытых файловых дескрипторов из одного выполняющегося процесса в другой.

Информация, предоставляемая этой функцией, обычно также доступна как побочный продукт итерации по каталогу. Во время итерации по каталогу вызов is_socket(*iterator) менее эффективен, чем is_socket(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

Смотрите также

определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки
(функция)
представляет тип файла и права доступа
(класс)
проверяет, известен ли статус файла
(функция)
проверяет, ссылается ли данный путь на блочное устройство
(функция)
проверяет, ссылается ли данный путь на символьное устройство
(функция)
проверяет, ссылается ли данный путь на директорию
(функция)
проверяет, ссылается ли данный путь на именованный канал
(функция)
проверяет, ссылается ли аргумент на другой файл
(функция)
проверяет, ссылается ли аргумент на обычный файл
(функция)
проверяет, ссылается ли аргумент на символьную ссылку
(функция)
проверяет, ссылается ли путь на существующий объект файловой системы
(функция)
кэшированный статус файла, обозначенного этой записью директории
кэшированный symlink_status файла, обозначенного этой записью директории
(публичная функция-член std::experimental::filesystem::directory_entry )