std::experimental::filesystem::is_socket
| Definiert im Header <experimental/filesystem> |
||
| bool is_socket( file_status s ); |
(1) | (Dateisystem-TS) |
| bool is_socket( const path& p ); bool is_socket( const path& p, error_code& ec ); |
(2) | (Dateisystem-TS) |
Prüft, ob der gegebene Dateistatus oder Pfad einem benannten IPC-Socket entspricht, wie durch die POSIX S_IFSOCK ermittelt wird.
Inhalt |
[edit] Parameter
| s | - | Dateistatus zum Prüfen |
| p | - | Zu untersuchender Pfad |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung |
[edit] Rückgabewert
true, wenn die durch p angezeigte Datei oder der durch s angezeigte Typ auf einen benannten Socket verweist. Die nicht-auslösende Überladung gibt false zurück, wenn ein Fehler auftritt.
[edit] Ausnahmen
[edit] Hinweise
Benannte Sockets sind UNIX-Domain-Sockets, die mit den POSIX-APIs socket und bind erstellt werden und für fortgeschrittene Interprozesskommunikation verwendet werden können. Insbesondere können sie verwendet werden, um offene Dateideskriptoren von einem laufenden Prozess zu einem anderen zu transportieren.
Die von dieser Funktion bereitgestellten Informationen werden normalerweise auch als Nebenprodukt der Verzeichnisiteration bereitgestellt. Während der Verzeichnisiteration ist der Aufruf von is_socket(*iterator) weniger effizient als is_socket(iterator->status()).
[edit] Beispiel
#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"); }
Mögliche Ausgabe
"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
[edit] Siehe auch
| ermittelt Dateiattribute ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird (Funktion) | |
| repräsentiert Dateityp und Berechtigungen (Klasse) | |
| prüft, ob der Dateistatus bekannt ist (Funktion) | |
| prüft, ob der gegebene Pfad auf ein Blockgerät verweist (Funktion) | |
| prüft, ob der gegebene Pfad auf ein Zeichengerät verweist (Funktion) | |
| prüft, ob der gegebene Pfad auf ein Verzeichnis verweist (Funktion) | |
| prüft, ob der gegebene Pfad auf eine benannte Pipe verweist (Funktion) | |
| prüft, ob das Argument auf eine andere Datei verweist (Funktion) | |
| prüft, ob das Argument auf eine reguläre Datei verweist (Funktion) | |
| prüft, ob das Argument auf einen symbolischen Link verweist (Funktion) | |
| prüft, ob ein Pfad auf ein existierendes Dateisystemobjekt verweist (Funktion) | |
| gecacheter Status der von diesem Verzeichniseintrag bezeichneten Datei gecacheter symlink_status der von diesem Verzeichniseintrag bezeichneten Datei (öffentliche Memberfunktion von std::experimental::filesystem::directory_entry) |