名前空間
変種
操作

std::experimental::filesystem::perms

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
ヘッダー <experimental/filesystem> で定義されています
enum class perms;
(filesystem TS)

この型はファイルアクセス権を表します。permsBitmaskType の要件を満たします (これは、ビット演算子 operator&operator|operator^operator~operator&=operator|=、および operator^= がこの型に対して定義されていることを意味します)。

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

目次

[編集] メンバー定数

メンバー定数 値 (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 不明な権限 (例: file_status が権限なしで作成された場合)
add_perms 0x10000 権限ビットを追加するが、クリアしないことを permissions に指示する制御ビット
remove_perms 0x20000 権限ビットをクリアするが、追加しないことを permissions に指示する制御ビット
resolve_symlinks 0x40000 シンボリックリンクを解決することを permissions に指示する制御ビット

[編集] 注記

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

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

[編集]

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

[編集] 関連項目

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