Namespaces
Variants

std::filesystem:: is_socket

From cppreference.net
Definiert in Header <filesystem>
bool is_socket ( std:: filesystem :: file_status s ) noexcept ;
(1) (seit C++17)
bool is_socket ( const std:: filesystem :: path & p ) ;
(2) (seit C++17)
bool is_socket ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (seit C++17)

Prüft, ob der angegebene Dateistatus oder Pfad einem benannten IPC-Socket entspricht, wie durch das POSIX- S_IFSOCK bestimmt.

1) Entspricht s. type ( ) == file_type :: socket .
2,3) Entspricht is_socket ( status ( p ) ) oder is_socket ( status ( p, ec ) ) .

Inhaltsverzeichnis

Parameter

s - zu prüfender Dateistatus
p - zu untersuchender Pfad
ec - Ausgabeparameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

true wenn die durch p angegebene Datei oder der durch s angegebene Typ auf einen benannten Socket verweist. Die nicht-werfende Überladung gibt false zurück, falls ein Fehler auftritt.

Ausnahmen

Jede Überladung, die nicht als noexcept gekennzeichnet ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.

2,3) Setzt einen std:: error_code & -Parameter auf den OS-API-Fehlercode, falls ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

Hinweise

Named Sockets sind UNIX-Domain-Sockets, die mit den socket und bind POSIX-APIs erstellt werden und für erweiterte Interprozesskommunikation verwendet werden können. Insbesondere können sie dazu dienen, offene Dateideskriptoren von einem laufenden Prozess zu einem anderen zu transportieren.

Beispiel

#include <cstdio>
#include <cstring>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::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 << " ist eine reguläre Datei\n";
    if (fs::is_directory(s))
        std::cout << " ist ein Verzeichnis\n";
    if (fs::is_block_file(s))
        std::cout << " ist ein Blockgerät\n";
    if (fs::is_character_file(s))
        std::cout << " ist ein Zeichengerät\n";
    if (fs::is_fifo(s))
        std::cout << " ist eine benannte IPC-Pipe\n";
    if (fs::is_socket(s))
        std::cout << " ist ein benannter IPC-Socket\n";
    if (fs::is_symlink(s))
        std::cout << " ist ein Symlink\n";
    if (!fs::exists(s))
        std::cout << " existiert nicht\n";
}
int main()
{
    // Erstellen von Dateien verschiedener Arten
    fs::create_directory("sandbox");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // reguläre Datei erstellen
    fs::create_symlink("file", "sandbox/symlink");
    mkfifo("sandbox/pipe", 0644);
    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, reinterpret_cast<sockaddr*>(&addr), sizeof addr);
    // Demonstration verschiedener Status-Abfragen
    for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // verwendung des zwischengespeicherten Status aus dem Verzeichniseintrag
    demo_status("/dev/null", fs::status("/dev/null")); // direkte Aufrufe von status
    demo_status("/dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // Bereinigung (bevorzuge std::unique_ptr-basierte benutzerdefinierte Löscher)
    close(fd);
    fs::remove_all("sandbox");
}

Mögliche Ausgabe:

"sandbox/file" ist eine reguläre Datei
"sandbox/dir" ist ein Verzeichnis
"sandbox/pipe" ist eine benannte IPC-Pipe
"sandbox/sock" ist ein benannter IPC-Socket
"sandbox/symlink" ist ein Symlink
"/dev/null" ist ein Zeichengerät
"/dev/sda" ist ein Blockgerät
"sandbox/no" existiert nicht

Siehe auch

(C++17) (C++17)
Bestimmt Dateiattribute
Bestimmt Dateiattribute, überprüft das Symlink-Ziel
(Funktion)
Repräsentiert Dateityp und Berechtigungen
(Klasse)
Überprüft, ob der Dateistatus bekannt ist
(Funktion)
Überprüft, ob der gegebene Pfad auf ein Blockgerät verweist
(Funktion)
Überprüft, ob der gegebene Pfad auf ein Zeichengerät verweist
(Funktion)
Überprüft, ob der gegebene Pfad auf ein Verzeichnis verweist
(Funktion)
(C++17)
Überprüft, ob der gegebene Pfad auf eine benannte Pipe verweist
(Funktion)
(C++17)
Überprüft, ob das Argument auf eine andere Datei verweist
(Funktion)
Überprüft, ob das Argument auf eine reguläre Datei verweist
(Funktion)
(C++17)
Überprüft, ob das Argument auf einen symbolischen Link verweist
(Funktion)
(C++17)
Überprüft, ob der Pfad auf ein existierendes Dateisystemobjekt verweist
(Funktion)
Überprüft, ob der Verzeichniseintrag auf einen benannten IPC-Socket verweist
(Öffentliche Mitgliedsfunktion von std::filesystem::directory_entry )