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/w/cpp/filesystem/perms

Spec-Zone.ru

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