std::experimental::filesystem::permissions
來自 cppreference.com
< cpp | experimental | fs
定義於標頭檔案 <experimental/filesystem> |
||
void permissions( const path& p, perms prms ); void permissions( const path& p, perms prms, error_code& ec ); |
(檔案系統 TS) | |
更改檔案 p 解析到的訪問許可權,如同透過 POSIX fchmodat。如果設定了 prms::resolve_symlinks
,則跟隨符號連結。
效果取決於 prms,具體如下:
- 如果 perms::add_perms 和 perms::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_perms 和 perms::remove_perms 都設定了,則會發生錯誤。
不拋異常的過載在錯誤時沒有特殊操作。
目錄 |
[編輯] 引數
p | - | 要檢查的路徑 |
prms | - | 要設定、新增或移除的許可權 |
ec | - | 非丟擲過載中用於錯誤報告的出參 |
[編輯] 返回值
(無)
[編輯] 異常
不帶 error_code& 引數的過載在底層作業系統 API 錯誤時丟擲 filesystem_error,該異常以 p 作為第一個引數,作業系統錯誤碼作為錯誤碼引數。如果記憶體分配失敗,可能會丟擲 std::bad_alloc。帶 error_code& 引數的過載,如果作業系統 API 呼叫失敗,則將其設定為作業系統 API 錯誤碼;如果沒有錯誤發生,則執行 ec.clear()。此過載具有noexcept 規範:
noexcept
[編輯] 註解
許可權不一定以位的形式實現,但它們在概念上被這樣對待。
某些許可權位在某些系統上可能會被忽略,更改某些位可能會自動更改其他位(例如,在沒有所有者/組/所有區別的平臺上,設定任何一個寫入位都會設定所有三個)。
[編輯] 示例
執行此程式碼
#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--
[編輯] 參閱
標識檔案系統許可權 (列舉) | |
確定檔案屬性 確定檔案屬性,檢查符號連結目標 (函式) |