Spec-Zone.ru › C++

std::filesystem::perms

Определено в заголовочном файле <filesystem>
enum class perms;
(начиная с C++17)

Этот тип представляет разрешения на доступ к файлам.

perms удовлетворяет требованиям BitmaskType (то есть для этого типа определены побитовые операторы operator&, operator|, operator^, operator~, operator&=, operator|= и operator^=). none представляет пустую битовую маску; каждый другой перечислитель представляет отдельный элемент битовой маски.

Разрешения на доступ моделируют биты разрешений POSIX, а отдельные разрешения файла (возвращаемые filesystem::status) представляют собой комбинацию некоторых из следующих битов:

Константы-члены

Константа-член Значение (восьмеричное) Эквивалент POSIX Значение
none 0 Биты разрешений не установлены
owner_read 0400 S_IRUSR Владелец файла имеет разрешение на чтение
owner_write 0200 S_IWUSR Владелец файла имеет разрешение на запись
owner_exec 0100 S_IXUSR Владелец файла имеет разрешение на выполнение/поиск
owner_all 0700 S_IRWXU Владелец файла имеет разрешения на чтение, запись и выполнение/поиск

Эквивалентно owner_read | owner_write | owner_exec

group_read 040 S_IRGRP Группа пользователей файла имеет разрешение на чтение
group_write 020 S_IWGRP Группа пользователей файла имеет разрешение на запись
group_exec 010 S_IXGRP Группа пользователей файла имеет разрешение на выполнение/поиск
group_all 070 S_IRWXG Группа пользователей файла имеет разрешения на чтение, запись и выполнение/поиск

Эквивалентно group_read | group_write | group_exec

others_read 04 S_IROTH Другие пользователи имеют разрешение на чтение
others_write 02 S_IWOTH Другие пользователи имеют разрешение на запись
others_exec 01 S_IXOTH Другие пользователи имеют разрешение на выполнение/поиск
others_all 07 S_IRWXO Другие пользователи имеют разрешения на чтение, запись и выполнение/поиск

Эквивалентно others_read | others_write | others_exec

all 0777 Все пользователи имеют разрешения на чтение, запись и выполнение/поиск

Эквивалентно owner_all | group_all | others_all

set_uid 04000 S_ISUID При выполнении установить идентификатор пользователя равным идентификатору пользователя — владельца файла
set_gid 02000 S_ISGID При выполнении установить идентификатор группы равным идентификатору группы пользователей файла
sticky_bit 01000 S_ISVTX Значение определяется реализацией, однако POSIX XSI указывает, что при установке этого бита для каталога удалять файлы могут только их владельцы, даже если каталог доступен для записи другим пользователям (используется вместе с /tmp)
mask 07777 Все допустимые биты разрешений.

Эквивалентно all | set_uid | set_gid | sticky_bit

Кроме того, определены следующие константы этого типа, которые не представляют разрешения:

Константа-член Значение (шестнадцатеричное) Значение
unknown 0xFFFF Неизвестные разрешения (например, когда filesystem::file_status создан без разрешений)

Примечания

Разрешения не обязательно реализуются в виде битов, но концептуально рассматриваются именно так.

В некоторых системах отдельные биты разрешений могут игнорироваться, а изменение некоторых битов может автоматически изменять другие (например, на платформах без разграничения прав владельца/группы/всех пользователей установка любого из трех битов записи устанавливает все три).

Пример

#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");
}

Возможный вывод:

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

См. также

statussymlink_status
(C++17)(C++17)
определяет атрибуты файла
определяет атрибуты файла, проверяя целевой объект символической ссылки
(функция)
permissions
(C++17)
изменяет разрешения на доступ к файлу
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/perms

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API