std::experimental::filesystem::permissions
来自 cppreference.cn
< 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 | - | 非抛出重载中的错误报告输出参数 |
[编辑] 返回值
(无)
[编辑] 异常
不接受 error_code& 参数的重载会在底层 OS API 错误时抛出 filesystem_error,并使用 p 作为第一个参数,OS 错误代码作为错误代码参数构造。如果内存分配失败,可能会抛出 std::bad_alloc。接受 error_code& 参数的重载会在 OS API 调用失败时将其设置为 OS API 错误代码,并在没有错误发生时执行 ec.clear()。此重载具有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"); // 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--
[编辑] 参见
标识文件系统权限 (枚举) | |
确定文件属性 确定文件属性,检查符号链接目标 (函数) |