| Technical Specification | ||||
| Filesystem library(filesystem TS) | ||||
| Library fundamentals(library fundamentals TS) | ||||
| Library fundamentals 2(library fundamentals TS v2) | ||||
| Library fundamentals 3(library fundamentals TS v3) | ||||
| Extensions for parallelism(parallelism TS) | ||||
| Extensions for parallelism 2(parallelism TS v2) | ||||
| Extensions for concurrency(concurrency TS) | ||||
| Extensions for concurrency 2(concurrency TS v2) | ||||
| Concepts(concepts TS) | ||||
| Ranges(ranges TS) | ||||
| Reflection(reflection TS) | ||||
| Mathematical special functions(special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
| Classes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| File types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <experimental/filesystem> | ||
enumclass perms; | (filesystem TS) | |
This type represents file access permissions.perms satisfies the requirements ofBitmaskType (which means the bitwise operatorsoperator&,operator|,operator^,operator~,operator&=,operator|=, andoperator^= are defined for this type).
Access permissions modelPOSIX permission bits, and any individual file permissions (as reported bystatus) are a combination of some of the following bits:
Contents |
| Member constant | Value (octal) | POSIX equivalent | Meaning |
|---|---|---|---|
none | 0 | No permission bits are set | |
owner_read | 0400 | S_IRUSR | File owner has read permission |
owner_write | 0200 | S_IWUSR | File owner has write permission |
owner_exec | 0100 | S_IXUSR | File owner has execute/search permission |
owner_all | 0700 | S_IRWXU | File owner has read, write, and execute/search permissions Equivalent toowner_read| owner_write| owner_exec |
group_read | 040 | S_IRGRP | The file's user group has read permission |
group_write | 020 | S_IWGRP | The file's user group has write permission |
group_exec | 010 | S_IXGRP | The file's user group has execute/search permission |
group_all | 070 | S_IRWXG | The file's user group has read, write, and execute/search permissions Equivalent togroup_read| group_write| group_exec |
others_read | 04 | S_IROTH | Other users have read permission |
others_write | 02 | S_IWOTH | Other users have write permission |
others_exec | 01 | S_IXOTH | Other users have execute/search permission |
others_all | 07 | S_IRWXO | Other users have read, write, and execute/search permissions Equivalent toothers_read| others_write| others_exec |
all | 0777 | All users have read, write, and execute/search permissions Equivalent toowner_all| group_all| others_all | |
set_uid | 04000 | S_ISUID | Set user ID to file owner user ID on execution |
set_gid | 02000 | S_ISGID | Set group ID to file's user group ID on execution |
sticky_bit | 01000 | S_ISVTX | Implementation-defined meaning, but POSIX XSI specifies that when set on a directory, only file owners may delete files even if the directory is writeable to others (used with/tmp) |
mask | 07777 | All valid permission bits Equivalent toall| set_uid| set_gid| sticky_bit |
Additionally, the following constants of this type are defined, which do not represent permissions:
| Member constant | Value (hex) | Meaning |
|---|---|---|
unknown | 0xFFFF | Unknown permissions (e.g. whenfile_status is created without permissions) |
add_perms | 0x10000 | Control bit that instructspermissions to add, but not clear permission bits |
remove_perms | 0x20000 | Control bit that instructspermissions to clear, but not add permission bits |
resolve_symlinks | 0x40000 | Control bit that instructspermissions to resolve symlinks |
Permissions may not necessarily be implemented as bits, but they are treated that way conceptually.
Some permission bits may be ignored on some systems, and changing some bits may automatically change others (e.g. on platforms without owner/group/all distinction, setting any of the three write bits set all three).
#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");}
Possible output:
Created file with permissions: rw-r--r--After adding o+rwx and g+rwx: rwxrwxr--
| determines file attributes determines file attributes, checking the symlink target (function)[edit] | |
| modifies file access permissions (function)[edit] |