std::experimental::filesystem:: permissions
|
Определено в заголовке
<experimental/filesystem>
|
||
|
void
permissions
(
const
path
&
p, perms prms
)
;
void permissions ( const path & p, perms prms, error_code & ec ) ; |
(filesystem TS) | |
Изменяет права доступа к файлу, на который указывает
p
, как при использовании POSIX
fchmodat
. Символические ссылки отслеживаются, если установлен
prms::resolve_symlinks
.
Эффекты зависят от prms следующим образом:
- Если ни perms :: add_perms , ни perms :: remove_perms не установлены, права доступа к файлу устанавливаются точно в prms & fs :: perms :: mask (то есть применяется каждый корректный бит prms ).
- Если установлен perms :: add_perms , права доступа к файлу устанавливаются точно в status ( p ) . permissions ( ) | ( prms & perms :: mask ) (то есть добавляются все корректные биты, установленные в prms , но отсутствующие в текущих правах доступа файла).
- Если установлен perms :: remove_perms , права доступа к файлу устанавливаются точно в status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) (то есть сбрасываются все корректные биты, снятые в prms , но установленные в текущих правах доступа файла).
- Если установлены и perms :: add_perms , и perms :: remove_perms , возникает ошибка.
Нет выбрасывающий перегрузка не имеет специального действия при ошибке.
Содержание |
Параметры
| p | - | путь для проверки |
| prms | - | права доступа для установки, добавления или удаления |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей перегрузке |
Возвращаемое значение
(нет)
Исключения
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload hasПримечания
Разрешения могут быть реализованы не обязательно в виде битов, но концептуально они рассматриваются именно так.
Некоторые биты разрешений могут игнорироваться в некоторых системах, и изменение некоторых битов может автоматически изменять другие (например, на платформах без разграничения владелец/группа/все, установка любого из трех битов записи устанавливает все три).
Пример
#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"); // создать файл std::cout << "Создан файл с правами доступа: "; 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 << "После добавления o+rwx и g+rwx: "; demo_perms(fs::status("test.txt").permissions()); fs::remove("test.txt"); }
Возможный вывод:
Создан файл с правами доступа: rw-r--r-- После добавления o+rwx и g+rwx: rwxrwxr--
Смотрите также
|
определяет права доступа файловой системы
(перечисление) |
|
|
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки (функция) |