std::experimental::filesystem:: permissions
|
Definiert im Header
<experimental/filesystem>
|
||
|
void
permissions
(
const
path
&
p, perms prms
)
;
void permissions ( const path & p, perms prms, error_code & ec ) ; |
(Filesystem TS) | |
Ändert die Zugriffsberechtigungen der Datei, auf die
p
verweist, wie durch POSIX
fchmodat
. Symbolischen Links wird gefolgt, wenn
prms::resolve_symlinks
gesetzt ist.
Die Effekte hängen von prms wie folgt 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, aber nicht in den aktuellen Dateiberechtigungen vorhanden ist, 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, aber in den aktuellen Dateiberechtigungen 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 bei Fehlern keine spezielle Aktion.
Inhaltsverzeichnis |
Parameter
| p | - | zu untersuchender Pfad |
| prms | - | festzulegende, hinzuzufügende oder zu entfernende Berechtigungen |
| ec | - | Ausgabeparameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
(keine)
Ausnahmen
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload hasHinweise
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 <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"); // Datei erstellen std::cout << "Erstellte Datei mit Berechtigungen: "; 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 << "Nach Hinzufügen von o+rwx und g+rwx: "; demo_perms(fs::status("test.txt").permissions()); fs::remove("test.txt"); }
Mögliche Ausgabe:
Erstellte Datei mit Berechtigungen: rw-r--r-- Nach Hinzufügen von o+rwx und g+rwx: rwxrwxr--
Siehe auch
|
identifiziert Dateisystemberechtigungen
(enum) |
|
|
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel (function) |