std::filesystem::permissions
| Definiert in Header <filesystem> |
||
| void permissions( const std::filesystem::path& p, std::filesystem::perms prms, |
(1) | (seit C++17) |
| void permissions( const std::filesystem::path& p, std::filesystem::perms prms, |
(2) | (seit C++17) |
| void permissions( const std::filesystem::path& p, std::filesystem::perms prms, |
(3) | (seit C++17) |
Ändert die Zugriffsrechte der Datei, auf die p aufgelöst wird, als ob durch POSIX fchmodat. Symlinks werden verfolgt, es sei denn, perm_options::nofollow ist in opts gesetzt.
Die zweite Signatur verhält sich, als ob sie mit opts auf perm_options::replace gesetzt aufgerufen worden wäre.
Die Auswirkungen hängen wie folgt von prms und opts ab
- Wenn opts perm_options::replace ist, werden die Dateirechte genau auf prms & std::filesystem::perms::mask gesetzt (d. h. jedes gültige Bit von prms wird angewendet).
- Wenn opts perm_options::add ist, werden die Dateirechte genau auf status(p).permissions() | (prms & perms::mask) gesetzt (d. h. jedes gültige Bit, das in prms gesetzt ist, aber nicht in den aktuellen Dateirechten, wird zu den Dateirechten hinzugefügt).
- Wenn opts perm_options::remove ist, werden die Dateirechte genau auf status(p).permissions() & ~(prms & perms::mask) gesetzt (d. h. jedes gültige Bit, das in prms gelöscht ist, aber in den aktuellen Dateirechten gesetzt ist, wird aus den Dateirechten gelöscht).
opts muss nur eines von replace, add oder remove gesetzt haben.
Die nicht werfende Überladung hat keine spezielle Aktion im Fehlerfall.
Inhalt |
[edit] Parameter
| p | - | Zu untersuchender Pfad |
| prms | - | zu setzende, hinzuzufügende oder zu entfernende Berechtigungen |
| opts | - | Optionen, die die von dieser Funktion ausgeführte Aktion steuern |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung |
[edit] Rückgabewert
(keine)
[edit] Ausnahmen
Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.
[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 <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"); }
Mögliche Ausgabe
Created file with permissions: rw-r--r-- After adding u+rwx and g+wrx: rwxrwxr--
[edit] Siehe auch
| (C++17) |
identifiziert Dateisystemberechtigungen (Enum) |
| (C++17)(C++17) |
ermittelt Dateiattribute ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird (Funktion) |