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 | Владелец файла имеет разрешения на чтение, запись и выполнение/поиск Эквивалентно |
group_read |
040 |
S_IRGRP | Группа пользователей файла имеет разрешение на чтение |
group_write |
020 |
S_IWGRP | Группа пользователей файла имеет разрешение на запись |
group_exec |
010 |
S_IXGRP | Группа пользователей файла имеет разрешение на выполнение/поиск |
group_all |
070 |
S_IRWXG | Группа пользователей файла имеет разрешения на чтение, запись и выполнение/поиск Эквивалентно |
others_read |
04 |
S_IROTH | Другие пользователи имеют разрешение на чтение |
others_write |
02 |
S_IWOTH | Другие пользователи имеют разрешение на запись |
others_exec |
01 |
S_IXOTH | Другие пользователи имеют разрешение на выполнение/поиск |
others_all |
07 |
S_IRWXO | Другие пользователи имеют разрешения на чтение, запись и выполнение/поиск Эквивалентно |
all |
0777 | Все пользователи имеют разрешения на чтение, запись и выполнение/поиск Эквивалентно |
|
set_uid |
04000 |
S_ISUID | При выполнении установить идентификатор пользователя равным идентификатору пользователя — владельца файла |
set_gid |
02000 |
S_ISGID | При выполнении установить идентификатор группы равным идентификатору группы пользователей файла |
sticky_bit |
01000 |
S_ISVTX | Значение определяется реализацией, однако POSIX XSI указывает, что при установке этого бита для каталога удалять файлы могут только их владельцы, даже если каталог доступен для записи другим пользователям (используется вместе с /tmp) |
mask |
07777 | Все допустимые биты разрешений. Эквивалентно |
Кроме того, определены следующие константы этого типа, которые не представляют разрешения:
| Константа-член | Значение (шестнадцатеричное) | Значение |
|---|---|---|
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) | определяет атрибуты файла определяет атрибуты файла, проверяя целевой объект символической ссылки (функция) |
|
(C++17) | изменяет разрешения на доступ к файлу (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/perms