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 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.
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) |