Namespaces
Variants

std::experimental::filesystem:: perms

From cppreference.net
Определено в заголовочном файле <experimental/filesystem>
enum class perms ;
(filesystem TS)

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

Модель прав доступа POSIX permission bits , и индивидуальные права доступа к файлам (как сообщает 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 Неизвестные разрешения (например, когда file_status создаётся без разрешений)
add_perms 0x10000 Управляющий бит, который указывает permissions добавлять, но не очищать биты разрешений
remove_perms 0x20000 Управляющий бит, который указывает permissions очищать, но не добавлять биты разрешений
resolve_symlinks 0x40000 Управляющий бит, который указывает permissions разрешать символьные ссылки

Примечания

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

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

Пример

#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"); // create file
    std::cout << "Created file with permissions: ";
    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 << "After adding o+rwx and g+rwx:  ";
    demo_perms(fs::status("test.txt").permissions());
    fs::remove("test.txt");
}

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

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

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

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