Namespaces
Variants

std::filesystem:: permissions

From cppreference.net
Definiert in Header <filesystem>
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

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

std:: filesystem :: perms prms,

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

Ändert die Zugriffsberechtigungen der Datei, auf die p verweist, wie durch POSIX fchmodat . Symbolischen Links wird gefolgt, es sei denn perm_options::nofollow ist in opts gesetzt.

Die zweite Signatur verhält sich so, als wäre sie mit opts auf perm_options :: replace aufgerufen worden.

Die Auswirkungen hängen von prms und opts wie folgt ab:

  • Wenn opts gleich perm_options :: replace ist, werden die Dateiberechtigungen exakt auf prms & std:: filesystem :: perms :: mask gesetzt (d.h. jedes gültige Bit von prms wird angewendet).
  • Wenn opts gleich perm_options :: add ist, werden die Dateiberechtigungen exakt auf status ( p ) . permissions ( ) | ( prms & perms :: mask ) gesetzt (d.h. jedes gültige Bit, das in prms gesetzt, aber nicht in den aktuellen Dateiberechtigungen enthalten ist, wird zu den Dateiberechtigungen hinzugefügt).
  • Wenn opts gleich perm_options :: remove ist, werden die Dateiberechtigungen exakt auf status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) gesetzt (d.h. jedes gültige Bit, das in prms nicht gesetzt, aber in den aktuellen Dateiberechtigungen enthalten ist, wird aus den Dateiberechtigungen entfernt).

opts muss genau eine der Optionen replace , add oder remove gesetzt haben.

Die nicht werfende Überladung hat bei einem Fehler keine spezielle Aktion.

Inhaltsverzeichnis

Parameter

p - zu untersuchender Pfad
prms - zu setzende, hinzuzufügende oder zu entfernende Berechtigungen
opts - Optionen zur Steuerung der durch diese Funktion ausgeführten Aktion
ec - Out-Parameter für Fehlermeldungen in der nicht-werfenden Überladung

Rückgabewert

(keine)

Exceptions

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

1) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Pfadargument und dem OS-Fehlercode als Fehlercodeargument.
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

Berechtigungen werden möglicherweise nicht unbedingt als Bits implementiert, aber konzeptionell werden sie so behandelt.

Einige Berechtigungsbits werden auf manchen Systemen ignoriert, und das Ändern einiger Bits kann automatisch andere ändern (z.B. auf Plattformen ohne Unterscheidung zwischen Besitzer/Gruppe/Alle, setzt das Setzen eines der drei Schreibbits alle drei).

Beispiel

#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"); // Datei erstellen
    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");
}

Mögliche Ausgabe:

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

Siehe auch

(C++17)
identifiziert Dateisystemberechtigungen
(enum)
(C++17) (C++17)
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel
(function)