Namespaces
Variants

std::filesystem:: perms

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

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

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

Модель прав доступа POSIX permission bits , а также индивидуальные права доступа к файлам (как сообщает 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

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

Константа-член Значение (hex) Значение
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--

Смотрите также

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