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