std::filesystem::perms - cppreference.com
提供: cppreference.com
<tbody> </tbody>
この型はファイルアクセスパーミッションを表します。 perms は BitmaskType の要件を満たします (つまり、ビット単位の演算子 operator&, operator|, operator^, operator~, operator&=, operator|=, operator^= がすべて、この型に対して定義されます)。
アクセスパーミッションは POSIX のパーミッションビットをモデル化し、個別のファイルパーミッションは (status によって報告される場合) 以下のビットのいくつかを組み合わせたものになります。
メンバ定数
| メンバ定数 | 値 (8進数) | POSIX の対応する定数 | 意味 |
|---|---|---|---|
none
|
0
|
設定されているパーミッションビットはありません | |
owner_read
|
0400
|
S_IRUSR
|
ファイルの所有者が読み込みパーミッションを持ちます |
owner_write
|
0200
|
S_IWUSR
|
ファイルの所有者が書き込みパーミッションを持ちます |
owner_exec
|
0100
|
S_IXUSR
|
ファイルの所有者が実行/検索パーミッションを持ちます |
owner_all
|
0700
|
S_IRWXU
|
ファイルの所有者が読み込み、書き込み、実行/検索パーミッションを持ちます
|
group_read
|
040
|
S_IRGRP
|
ファイルのユーザグループが読み込みパーミッションを持ちます |
group_write
|
020
|
S_IWGRP
|
ファイルのユーザグループが書き込みパーミッションを持ちます |
group_exec
|
010
|
S_IXGRP
|
ファイルのユーザグループが実行/検索パーミッションを持ちます |
group_all
|
070
|
S_IRWXG
|
ファイルのユーザグループが読み込み、書き込み、実行/検索パーミッションを持ちます
|
others_read
|
04
|
S_IROTH
|
その他のユーザが読み込みパーミッションを持ちます |
others_write
|
02
|
S_IWOTH
|
その他のユーザが書き込みパーミッションを持ちます |
others_exec
|
01
|
S_IXOTH
|
その他のユーザが実行/検索パーミッションを持ちます |
others_all
|
07
|
S_IRWXO
|
その他のユーザが読み込み、書き込み、実行/検索パーミッションを持ちます
|
all
|
0777
|
すべてのユーザが読み込み、書き込み、実行/検索パーミッションを持ちます
| |
set_uid
|
04000
|
S_ISUID
|
実行時、ユーザIDをファイルの所有者のユーザIDに設定します |
set_gid
|
02000
|
S_ISGID
|
実行時、グループIDをファイルのユーザグループIDに設定します |
sticky_bit
|
01000
|
S_ISVTX
|
処理系定義の意味、ただし POSIX XSI ではディレクトリに設定された場合そのディレクトリがその他のユーザに書き込みパーミッションがなくてもファイルの所有者のみがファイルを削除できます (/tmp で使用されます)
|
mask
|
07777
|
すべての有効なパーミッションビット
|
さらに、パーミッションを表さない以下の定数がこの型の定数として定義されます。
| メンバ定数 | 値 (16進数) | 意味 |
|---|---|---|
unknown
|
0xFFFF
|
不明なパーミッション (例えばパーミッションを指定せずに file_status が作成された場合) |
ノート
パーミッションは、ビットとして実装されている必要はありませんが、概念的にはそのように取り扱われます。
システムによっては、いくつかのパーミッションビットは無視されるかもしれませんし、いくつかのビットは自動的に他のビットを変更するかもしれません (例えば、オーナー/グループ/全員の区別を持たないプラットフォームでは、3つの書き込みビットのいずれかを設定するだけで、3つ全部が設定されます)。
例
#include <fstream> #include <bitset> #include <iostream> #include <filesystem> namespace fs = std::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::owner_all | fs::perms::group_all, fs::perm_options::add); 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+wrx: rwxrwxr--