Namespaces
Variants

std::experimental::filesystem:: permissions

From cppreference.net
定义于头文件 <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--

参见

标识文件系统权限
(枚举)
确定文件属性
确定文件属性,检查符号链接目标
(函数)