Namespaces
Variants

std::filesystem:: is_block_file

From cppreference.net
Défini dans l'en-tête <filesystem>
bool is_block_file ( std:: filesystem :: file_status s ) noexcept ;
(1) (depuis C++17)
bool is_block_file ( const std:: filesystem :: path & p ) ;
(2) (depuis C++17)
bool is_block_file ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (depuis C++17)

Vérifie si le statut de fichier ou le chemin donné correspond à un fichier spécial de bloc, comme déterminé par la norme POSIX S_ISBLK . Les exemples de fichiers spéciaux de bloc sont les périphériques de bloc tels que / dev / sda ou / dev / loop0 sous Linux.

1) Équivalent à s. type ( ) == file_type :: block .
2,3) Équivalent à is_block_file ( status ( p ) ) ou is_block_file ( status ( p, ec ) ) .

Table des matières

Paramètres

s - statut du fichier à vérifier
p - chemin à examiner
ec - paramètre de sortie pour le rapport d'erreur dans la surcharge non-lançante

Valeur de retour

true si le fichier indiqué par p ou si le type indiqué par s fait référence à un périphérique de bloc. La surcharge non levante retourne false si une erreur survient.

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

2,3) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API du système d'exploitation échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Exemple

#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 << " est un fichier régulier\n";
    if (fs::is_directory(s))
        std::cout << " est un répertoire\n";
    if (fs::is_block_file(s))
        std::cout << " est un périphérique bloc\n";
    if (fs::is_character_file(s))
        std::cout << " est un périphérique caractère\n";
    if (fs::is_fifo(s))
        std::cout << " est un tube IPC nommé\n";
    if (fs::is_socket(s))
        std::cout << " est un socket IPC nommé\n";
    if (fs::is_symlink(s))
        std::cout << " est un lien symbolique\n";
    if (!fs::exists(s))
        std::cout << " n'existe pas\n";
}
int main()
{
    // créer des fichiers de différents types
    fs::create_directory("sandbox");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // créer un fichier régulier
    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);
    // démontrer différents accesseurs de statut
    for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // utiliser le statut mis en cache de l'entrée de répertoire
    demo_status("/dev/null", fs::status("/dev/null")); // appels directs à status
    demo_status("/dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // nettoyage (préférer les suppresseurs personnalisés basés sur std::unique_ptr)
    close(fd);
    fs::remove_all("sandbox");
}

Sortie possible :

"sandbox/file" est un fichier régulier
"sandbox/dir" est un répertoire
"sandbox/pipe" est un tube IPC nommé
"sandbox/sock" est un socket IPC nommé
"sandbox/symlink" est un lien symbolique
"/dev/null" est un périphérique caractère
"/dev/sda" est un périphérique bloc
"sandbox/no" n'existe pas

Voir aussi

(C++17) (C++17)
détermine les attributs du fichier
détermine les attributs du fichier, en vérifiant la cible du lien symbolique
(fonction)
représente le type de fichier et les permissions
(classe)
vérifie si le statut du fichier est connu
(fonction)
vérifie si le chemin donné fait référence à un périphérique de caractères
(fonction)
vérifie si le chemin donné fait référence à un répertoire
(fonction)
(C++17)
vérifie si le chemin donné fait référence à un tube nommé
(fonction)
(C++17)
vérifie si l'argument fait référence à un autre type de fichier
(fonction)
vérifie si l'argument fait référence à un fichier régulier
(fonction)
(C++17)
vérifie si l'argument fait référence à une socket IPC nommée
(fonction)
(C++17)
vérifie si l'argument fait référence à un lien symbolique
(fonction)
(C++17)
vérifie si le chemin fait référence à un objet du système de fichiers existant
(fonction)
vérifie si l'entrée de répertoire fait référence à un périphérique bloc
(fonction membre publique de std::filesystem::directory_entry )