Namensräume
Varianten
Aktionen

std::filesystem::perms

Von cppreference.com
 
 
 
Definiert in Header <filesystem>
enum class perms;
(seit C++17)

Dieser Typ repräsentiert Dateizugriffsberechtigungen.

perms erfüllt die Anforderungen von BitmaskType (was bedeutet, dass die bitweisen Operatoren operator&, operator|, operator^, operator~, operator&=, operator|= und operator^= für diesen Typ definiert sind). none repräsentiert die leere Bitmaske; jeder andere Aufzählungswert repräsentiert ein eigenständiges Bitmaskenelement.

Zugriffsberechtigungen modellieren POSIX-Berechtigungsbits, und einzelne Dateiberechtigungen (wie von filesystem::status gemeldet) sind eine Kombination aus einigen der folgenden Bits

Inhalt

[edit] Member-Konstanten

Member-Konstante Wert (Oktal) POSIX-Äquivalent Bedeutung
keine 0 Keine Berechtigungsbits gesetzt
owner_read 0400 S_IRUSR Der Dateibesitzer hat Leseberechtigung
owner_write 0200 S_IWUSR Der Dateibesitzer hat Schreibberechtigung
owner_exec 0100 S_IXUSR Der Dateibesitzer hat Ausführungs-/Suchberechtigung
owner_all 0700 S_IRWXU Der Dateibesitzer hat Lese-, Schreib- und Ausführungs-/Suchberechtigungen

Äquivalent zu owner_read | owner_write | owner_exec

group_read 040 S_IRGRP Die Benutzergruppe der Datei hat Leseberechtigung
group_write 020 S_IWGRP Die Benutzergruppe der Datei hat Schreibberechtigung
group_exec 010 S_IXGRP Die Benutzergruppe der Datei hat Ausführungs-/Suchberechtigung
group_all 070 S_IRWXG Die Benutzergruppe der Datei hat Lese-, Schreib- und Ausführungs-/Suchberechtigungen

Äquivalent zu group_read | group_write | group_exec

others_read 04 S_IROTH Andere Benutzer haben Leseberechtigung
others_write 02 S_IWOTH Andere Benutzer haben Schreibberechtigung
others_exec 01 S_IXOTH Andere Benutzer haben Ausführungs-/Suchberechtigung
others_all 07 S_IRWXO Andere Benutzer haben Lese-, Schreib- und Ausführungs-/Suchberechtigungen

Äquivalent zu others_read | others_write | others_exec

all 0777 Alle Benutzer haben Lese-, Schreib- und Ausführungs-/Suchberechtigungen

Äquivalent zu owner_all | group_all | others_all

set_uid 04000 S_ISUID Beim Ausführen wird die User-ID auf die des Dateibesitzers gesetzt
set_gid 02000 S_ISGID Beim Ausführen wird die Group-ID auf die der Dateigruppe gesetzt
sticky_bit 01000 S_ISVTX Bedeutung implementationsabhängig, aber POSIX XSI gibt an, dass beim Setzen auf einem Verzeichnis nur Dateibesitzer Dateien löschen dürfen, auch wenn das Verzeichnis für andere beschreibbar ist (verwendet mit /tmp)
mask 07777 Alle gültigen Berechtigungsbits.

Äquivalent zu all | set_uid | set_gid | sticky_bit

Zusätzlich sind die folgenden Konstanten dieses Typs definiert, die keine Berechtigungen repräsentieren

Member-Konstante Wert (Hex) Bedeutung
unknown 0xFFFF Unbekannte Berechtigungen (z. B. wenn filesystem::file_status ohne Berechtigungen erstellt wird)

[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)(C++17)
ermittelt Dateiattribute
ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird
(Funktion) [bearbeiten]
modifiziert Dateizugriffsberechtigungen
(Funktion) [bearbeiten]