std::filesystem::permissions - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
(C++17以上) | |
POSIX の fchmodat によって行われたかのように、 p の解決先のファイルのアクセスパーミッションを変更します。 opts に perm_options::nofollow が設定されていなければ、シンボリックリンクを辿ります。
2番目のシグネチャは、 opts に perm_options::replace を設定して呼ばれたかのように振る舞います。
効果は prms と opts によって以下のようになります。
optsがperm_options::replaceであれば、ファイルパーミッションは正確にprms & std::filesystem::perms::maskに設定されます (つまり、prmsのすべての有効なビットが適用されます)。optsがperm_options::addであれば、ファイルパーミッションは正確にstatus(p).permissions() | (prms & perms::mask)に設定されます (つまり、prmsに設定されているけれどもファイルの現在のパーミッションにはないあらゆる有効なビットが、ファイルのパーミッションに追加されます)。optsがperm_options::removeであれば、ファイルパーミッションは正確にstatus(p).permissions() & ~(prms & perms::mask)に設定されます (つまり、prmsではクリアされているけれどもファイルの現在のパーミッションには設定されているあらゆる有効なビットが、ファイルのパーミッションからクリアされます)。
opts は replace、add、または remove のいずれかひとつだけが設定されていなければなりません。
例外を投げないオーバーロードは、エラーが発生した場合、何も特別なアクションをしません。
引数
| p | - | 調べるパス |
| prms | - | 設定、追加、または削除するパーミッション |
| opts | - | この関数が取るアクションを制御するオプション |
| ec | - | 例外を投げないオーバーロードでエラーを報告するための出力引数 |
戻り値
(なし)
例外
std::error_code& 引数を取らないオーバーロードは、ベースとなる OS の API でエラーが発生した場合、第1パス引数に p、エラーコード引数に OS のエラーコードを指定して構築された filesystem_error を投げます。 std::error_code& 引数を取るオーバーロードは、 OS の API 呼び出しが失敗した場合、その引数を OS の API のエラーコードに設定し、エラーが発生しない場合は ec.clear() を実行します。 noexcept 指定のないあらゆるオーバーロードは、メモリ確保に失敗した場合 std::bad_alloc を投げる可能性があります。
ノート
パーミッションは、ビットとして実装されている必要はありませんが、概念的にはそのように取り扱われます。
システムによっては、いくつかのパーミッションビットは無視されるかもしれませんし、いくつかのビットは自動的に他のビットを変更するかもしれません (例えば、オーナー/グループ/全員の区別を持たないプラットフォームでは、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--