名前空間
変種
操作

std::experimental::filesystem::permissions

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
ヘッダー <experimental/filesystem> で定義されています
void permissions( const path& p, perms prms );
void permissions( const path& p, perms prms, error_code& ec );
(filesystem TS)

p が解決するファイルのアクセス権限を変更します。POSIX の fchmodat と同様です。prms::resolve_symlinks が設定されている場合、シンボリックリンクがたどられます。

prms による効果は以下の通りです。

  • perms::add_permsperms::remove_perms も設定されていない場合、ファイル権限は正確に prms & fs::perms::mask に設定されます(つまり、prms の有効なビットがすべて適用されます)。
  • perms::add_perms が設定されている場合、ファイル権限は正確に status(p).permissions() | (prms & perms::mask) に設定されます(つまり、prms で設定されていてもファイルの現在の権限に設定されていない有効なビットが、ファイル権限に追加されます)。
  • perms::remove_perms が設定されている場合、ファイル権限は正確に status(p).permissions() & ~(prms & perms::mask) に設定されます(つまり、prms でクリアされていてもファイルの現在の権限に設定されている有効なビットが、ファイル権限でクリアされます)。
  • perms::add_permsperms::remove_perms の両方が設定されている場合、エラーが発生します。

例外を投げないオーバーロードは、エラー時に特別なアクションを取りません。

目次

[編集] パラメータ

p - 検査するパス
prms - 設定、追加、または削除する権限
エラーコード - 例外を投げないオーバーロードでのエラー報告のための出力パラメータ

[編集] 戻り値

(なし)

[編集] 例外

error_code& パラメータを取らないオーバーロードは、基底となる OS API エラー時に、最初の引数として p、エラーコード引数として OS エラーコードで構築された filesystem_error をスローします。メモリ割り当てが失敗した場合、std::bad_alloc がスローされる可能性があります。error_code& パラメータを取るオーバーロードは、OS API 呼び出しが失敗した場合にそれを OS API エラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードは
noexcept 指定:  
noexcept
  

[編集] 注記

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

一部の権限ビットは一部のシステムで無視される場合があり、一部のビットを変更すると他のビットも自動的に変更される場合があります(例: 所有者/グループ/その他 の区別がないプラットフォームでは、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 日本語 中文(简体) 中文(繁體)