Namespaces
Variants

std::filesystem:: is_block_file

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

Prüft, ob der angegebene Dateistatus oder Pfad einer blockorientierten Spezialdatei entspricht, wie durch das POSIX- S_ISBLK bestimmt. Beispiele für blockorientierte Spezialdateien sind Blockgeräte wie / dev / sda oder / dev / loop0 unter Linux.

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

Inhaltsverzeichnis

Parameter

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

Rückgabewert

true wenn die durch p angegebene Datei oder der durch s angegebene Typ auf ein Blockgerät verweist. Die nicht-werfende Überladung gibt false zurück, wenn 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, wenn ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

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 << " 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");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // create regular file
    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);
    // 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 (prefer std::unique_ptr-based custom deleters)
    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

Siehe auch

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