Namespaces
Variants

std::filesystem:: permissions

From cppreference.net
Défini dans l'en-tête <filesystem>
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: filesystem :: perm_options opts = perm_options :: replace ) ;
(1) (depuis C++17)
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: error_code & ec ) noexcept ;
(2) (depuis C++17)
(3) (depuis C++17)

Modifie les permissions d'accès du fichier vers lequel p se résout, comme par la fonction POSIX fchmodat . Les liens symboliques sont suivis sauf si perm_options::nofollow est défini dans opts .

La deuxième signature se comporte comme si elle était appelée avec opts défini à perm_options :: replace .

Les effets dépendent de prms et de opts comme suit :

  • Si opts est perm_options :: replace , les permissions du fichier sont définies exactement à prms & std:: filesystem :: perms :: mask (c'est-à-dire que chaque bit valide de prms est appliqué).
  • Si opts est perm_options :: add , les permissions du fichier sont définies exactement à status ( p ) . permissions ( ) | ( prms & perms :: mask ) (c'est-à-dire que tout bit valide qui est défini dans prms , mais pas dans les permissions actuelles du fichier, est ajouté aux permissions du fichier).
  • Si opts est perm_options :: remove , les permissions du fichier sont définies exactement à status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) (c'est-à-dire que tout bit valide qui est désactivé dans prms , mais défini dans les permissions actuelles du fichier, est désactivé dans les permissions du fichier).

opts doit avoir exactement une des options replace , add , ou remove définie.

La surcharge non levante n'a aucune action spéciale en cas d'erreur.

Table des matières

Paramètres

p - chemin à examiner
prms - permissions à définir, ajouter ou supprimer
opts - options contrôlant l'action effectuée par cette fonction
ec - paramètre de sortie pour le rapport d'erreurs dans la surcharge non-lancante

Valeur de retour

(aucun)

Exceptions

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

1) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec p comme premier argument de chemin et le code d'erreur du système comme argument de code d'erreur.
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 système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Notes

Les permissions ne sont pas nécessairement implémentées sous forme de bits, mais elles sont traitées ainsi conceptuellement.

Certains bits de permission peuvent être ignorés sur certains systèmes, et modifier certains bits peut automatiquement en modifier d'autres (par exemple, sur les plateformes sans distinction propriétaire/groupe/tous, définir l'un des trois bits d'écriture définit les trois).

Exemple

#include <filesystem>
#include <fstream>
#include <iostream>
void demo_perms(std::filesystem::perms p)
{
    using std::filesystem::perms;
    auto show = [=](char op, perms perm)
    {
        std::cout << (perms::none == (perm & p) ? '-' : op);
    };
    show('r', perms::owner_read);
    show('w', perms::owner_write);
    show('x', perms::owner_exec);
    show('r', perms::group_read);
    show('w', perms::group_write);
    show('x', perms::group_exec);
    show('r', perms::others_read);
    show('w', perms::others_write);
    show('x', perms::others_exec);
    std::cout << '\n';
}
int main()
{
    std::ofstream("test.txt"); // create file
    std::cout << "Created file with permissions: ";
    demo_perms(std::filesystem::status("test.txt").permissions());
    std::filesystem::permissions(
        "test.txt",
        std::filesystem::perms::owner_all | std::filesystem::perms::group_all,
        std::filesystem::perm_options::add
    );
    std::cout << "After adding u+rwx and g+rwx:  ";
    demo_perms(std::filesystem::status("test.txt").permissions());
    std::filesystem::remove("test.txt");
}

Sortie possible :

Created file with permissions: rw-r--r--
After adding u+rwx and g+wrx:  rwxrwxr--

Voir aussi

(C++17)
identifie les permissions du système de fichiers
(enum)
(C++17) (C++17)
détermine les attributs de fichier
détermine les attributs de fichier en vérifiant la cible du lien symbolique
(function)