namespace std::filesystem {
enum class perms {
none = 0,
owner_read = 0400,
owner_write = 0200,
owner_exec = 0100,
owner_all = 0700, // owner_read | owner_write | owner_exec
group_read = 040,
group_write = 020,
group_exec = 010,
group_all = 070, // group_read | group_write | group_exec
others_read = 04,
others_write = 02,
others_exec = 01,
others_all = 07, // others_read | others_write | others_exec
all = 0777, // owner_all | group_all | others_all
set_uid = 04000,
set_gid = 02000,
sticky_bit = 01000,
mask = 07777, // all | set_uid | set_gid | sticky_bit
unknown = 0xFFFF
};
}
概要
権限を表す、ビットマスクの列挙型。それぞれの列挙子は、以下の意味を持つ:
列挙子 | 値 (基本的に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を設定 |
set_gid |
02000 |
S_ISGID |
実行するグループIDを設定 |
sticky_bit |
01000 |
S_ISVTX |
OS依存の権限 |
mask |
07777 |
とりうる値が収まるビットマスク値 | |
unknown |
0xFFFF |
権限を指定せずにfile_status オブジェクトを生成した際の、権限不明の状態 |
例
#include <iostream>
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
int main()
{
std::ofstream{"a.txt"};
fs::file_status status = fs::status("a.txt");
fs::perms perm = status.permissions();
if ((perm & fs::perms::owner_read) == fs::perms::owner_read) {
std::cout << "owner can read the file" << std::endl;
}
if ((perm & fs::perms::owner_write) == fs::perms::owner_write) {
std::cout << "owner can write the file" << std::endl;
}
}
21
#include <iostream>
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
int main()
{
std::ofstream{"a.txt"};
fs::file_status status = fs::status("a.txt");
fs::perms perm = status.permissions();
if ((perm & fs::perms::owner_read) == fs::perms::owner_read) {
std::cout << "owner can read the file" << std::endl;
}
if ((perm & fs::perms::owner_write) == fs::perms::owner_write) {
std::cout << "owner can write the file" << std::endl;
出力
owner can read the file
owner can write the file
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: