名前空間
変種
操作

std::filesystem::perms

From cppreference.com
 
 
 
ヘッダー <filesystem> で定義
enum class perms;
(C++17以降)

この型はファイルアクセス権を表します。

permsBitmaskType の要件を満たします(これは、ビット演算子 operator&operator|operator^operator~operator&=operator|=、および operator^= がこの型に対して定義されていることを意味します)。none は空のビットマスクを表し、それ以外の列挙子は個別のビットマスク要素を表します。

アクセス権は POSIX 権限ビットをモデル化しており、個々のファイル権限(filesystem::status によって報告される)は、以下のビットの組み合わせです。

目次

[edit] メンバー定数

メンバー定数 値 (8進数) POSIX 相当 意味
なし 0 権限ビットが設定されていません
owner_read 0400 S_IRUSR ファイル所有者が読み取り権限を持っています
owner_write 0200 S_IWUSR ファイル所有者が書き込み権限を持っています
owner_exec 0100 S_IXUSR ファイル所有者が実行/検索権限を持っています
owner_all 0700 S_IRWXU ファイル所有者が読み取り、書き込み、および実行/検索権限を持っています

owner_read | owner_write | owner_exec に相当

group_read 040 S_IRGRP ファイルのユーザーグループが読み取り権限を持っています
group_write 020 S_IWGRP ファイルのユーザーグループが書き込み権限を持っています
group_exec 010 S_IXGRP ファイルのユーザーグループが実行/検索権限を持っています
group_all 070 S_IRWXG ファイルのユーザーグループが読み取り、書き込み、および実行/検索権限を持っています

group_read | group_write | group_exec に相当

others_read 04 S_IROTH 他のユーザーが読み取り権限を持っています
others_write 02 S_IWOTH 他のユーザーが書き込み権限を持っています
others_exec 01 S_IXOTH 他のユーザーが実行/検索権限を持っています
others_all 07 S_IRWXO 他のユーザーが読み取り、書き込み、および実行/検索権限を持っています

others_read | others_write | others_exec に相当

すべて 0777 すべてのユーザーが読み取り、書き込み、および実行/検索権限を持っています

owner_all | group_all | others_all に相当

set_uid 04000 S_ISUID 実行時にファイル所有者のユーザーIDにセットユーザーIDを設定します
set_gid 02000 S_ISGID 実行時にファイルのユーザーグループIDにセットグループIDを設定します
sticky_bit 01000 S_ISVTX 実装定義の意味ですが、POSIX XSI は、ディレクトリに設定されている場合、ディレクトリが他のユーザーに書き込み可能であっても、ファイル所有者のみがファイルを削除できることを指定しています(/tmp と一緒に使用されます)。
mask 07777 すべての有効な権限ビット。

all | set_uid | set_gid | sticky_bit に相当

さらに、以下の定数がこの型で定義されていますが、これらは権限を表しません。

メンバー定数 値 (16進数) 意味
unknown 0xFFFF 不明な権限(例: filesystem::file_status が権限なしで作成された場合)

[edit] 注記

権限は必ずしもビットとして実装されるとは限りませんが、概念的にはそのように扱われます。

一部の権限ビットは一部のシステムで無視される場合があり、一部のビットを変更すると他のビットも自動的に変更される場合があります(例: 所有者/グループ/その他 の区別がないプラットフォームでは、3つの書き込みビットのいずれかを設定すると、3つすべてが設定されます)。

[edit]

#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--

[edit] 関連項目

(C++17)(C++17)
ファイルの属性を決定する
シンボリックリンクのターゲットを確認してファイルの属性を決定する
(関数) [編集]
ファイルのアクセスパーミッションを変更する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)