Namensräume
Varianten
Aktionen

std::experimental::filesystem::permissions

Von cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
Definiert im Header <experimental/filesystem>
void permissions( const path& p, perms prms );
void permissions( const path& p, perms prms, error_code& ec );
(Dateisystem-TS)

Ändert die Zugriffsrechte der Datei, auf die p aufgelöst wird, als ob durch POSIX fchmodat. Symlinks werden verfolgt, wenn prms::resolve_symlinks gesetzt ist.

Die Auswirkungen hängen wie folgt von prms ab:

  • Wenn weder perms::add_perms noch perms::remove_perms gesetzt ist, werden die Dateiberechtigungen exakt auf prms & fs::perms::mask gesetzt (d. h. jedes gültige Bit von prms wird angewendet).
  • Wenn perms::add_perms gesetzt ist, werden die Dateiberechtigungen exakt auf status(p).permissions() | (prms & perms::mask) gesetzt (d. h. jedes gültige Bit, das in prms gesetzt ist, aber nicht in den aktuellen Berechtigungen der Datei, wird zu den Dateiberechtigungen hinzugefügt).
  • Wenn perms::remove_perms gesetzt ist, werden die Dateiberechtigungen exakt auf status(p).permissions() & ~(prms & perms::mask) gesetzt (d. h. jedes gültige Bit, das in prms gelöscht ist, aber in den aktuellen Berechtigungen der Datei gesetzt ist, wird in den Dateiberechtigungen gelöscht).
  • Wenn sowohl perms::add_perms als auch perms::remove_perms gesetzt sind, tritt ein Fehler auf.

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

Inhalt

[edit] Parameter

p - Zu untersuchender Pfad
prms - Zu setzende, hinzuzufügende oder zu entfernende Berechtigungen
ec - Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung

[edit] Rückgabewert

(keine)

[edit] Ausnahmen

Die Überladung, die keinen error_code&-Parameter annimmt, wirft filesystem_error bei Fehlern der zugrunde liegenden OS-API, konstruiert mit p als erstes Argument und dem OS-Fehlercode als Fehlercode-Argument. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen error_code&-Parameter annimmt, setzt diesen auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept-Spezifikation:  
noexcept
  

[edit] Hinweise

Berechtigungen sind nicht notwendigerweise als Bits implementiert, werden aber konzeptionell so behandelt.

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

[edit] Beispiel

#include <bitset>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
 
void demo_perms(fs::perms p)
{
     std::cout << ((p & fs::perms::owner_read) != fs::perms::none ? "r" : "-")
               << ((p & fs::perms::owner_write) != fs::perms::none ? "w" : "-")
               << ((p & fs::perms::owner_exec) != fs::perms::none ? "x" : "-")
               << ((p & fs::perms::group_read) != fs::perms::none ? "r" : "-")
               << ((p & fs::perms::group_write) != fs::perms::none ? "w" : "-")
               << ((p & fs::perms::group_exec) != fs::perms::none ? "x" : "-")
               << ((p & fs::perms::others_read) != fs::perms::none ? "r" : "-")
               << ((p & fs::perms::others_write) != fs::perms::none ? "w" : "-")
               << ((p & fs::perms::others_exec) != fs::perms::none ? "x" : "-")
               << '\n';
}
 
int main()
{
    std::ofstream("test.txt"); // create file
 
    std::cout << "Created file with permissions: ";
    demo_perms(fs::status("test.txt").permissions());
 
    fs::permissions("test.txt", fs::perms::add_perms |
                                fs::perms::owner_all | fs::perms::group_all);
 
    std::cout << "After adding o+rwx and g+rwx:  ";
    demo_perms(fs::status("test.txt").permissions());
 
    fs::remove("test.txt");
}

Mögliche Ausgabe

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

[edit] Siehe auch

identifiziert Dateisystemberechtigungen
(Aufzählung) [bearbeiten]
ermittelt Dateiattribute
ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird
(Funktion) [bearbeiten]