std::experimental::filesystem:: permissions
From cppreference.net
<
cpp
|
experimental
|
fs
|
定义于头文件
<experimental/filesystem>
|
||
|
void
permissions
(
const
path
&
p, perms prms
)
;
void permissions ( const path & p, perms prms, error_code & ec ) ; |
(文件系统 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
noexcept
规范:
noexcept
注释
权限不一定以位的形式实现,但在概念上被视作位处理。
某些系统可能会忽略某些权限位,并且更改某些位可能会自动更改其他位(例如,在没有所有者/组/全体区分的平台上,设置三个写入位中的任何一个会同时设置所有三个)。
示例
运行此代码
#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--
参见
|
标识文件系统权限
(枚举) |
|
|
确定文件属性
确定文件属性,检查符号链接目标 (函数) |