home | help
std::filesystem::perms(3)      C++ Standard Libary     std::filesystem::perms(3)

NAME
     std::filesystem::perms - std::filesystem::perms

Synopsis
	Defined in header <filesystem>
	enum class perms;		(since C++17)

	This type represents file access permissions.

	perms satisfies the requirements of BitmaskType (which means the bitwise
     operators
	operator&,  operator|, operator^, operator~, operator&=, operator|=, and
     operator^=
	are defined for this type). none represents  the  empty  bitmask;  every
     other
	enumerator represents a distinct bitmask element.

	Access	permissions model POSIX permission bits, and any individual file
     permissions
	(as reported by filesystem::status) are a combination  of  some  of  the
     following bits:

Member constants
	Member constant Value (octal) POSIX equivalent		      Meaning
	none		 0				 No  permission bits are
     set
	owner_read	0400	      S_IRUSR	       File owner has read  per-
     mission
	owner_write	0200	      S_IWUSR	       File owner has write per-
     mission
	owner_exec	 0100		S_IXUSR 	  File	owner  has  exe-
     cute/search
						       permission
						       File  owner   has   read,
     write, and
						       execute/search	 permis-
     sions
	owner_all	0700	      S_IRWXU
						       Equivalent to  owner_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
						       The file's user group has
     read,
						       write, and execute/search
     permissions
	group_all	070	      S_IRWXG
						       Equivalent  to group_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  exe-
     cute/search
						       permission
						       Other  users  have  read,
     write, and
						       execute/search	 permis-
     sions
	others_all	07	      S_IRWXO
						       Equivalent to others_read
     |
						       others_write    |    oth-
     ers_exec
						       All  users   have   read,
     write, and
						       execute/search	 permis-
     sions
	all		0777
						       Equivalent to owner_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
						       Implementation-defined
     meaning, but
						       POSIX  XSI specifies that
     when set on
	sticky_bit	01000	      S_ISVTX	       a  directory,  only  file
     owners may
						       delete  files even if the
     directory is
						       writeable to others (used
     with /tmp)
						       All   valid    permission
     bits.
	mask		07777
						       Equivalent   to	 all   |
     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.  when	filesys-
     tem::file_status
				    is created without permissions)

Notes
	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).

Example
     // Run this code

      #include <filesystem>
      #include <fstream>
      #include <iostream>

      void demo_perms(std::filesystem::perms p)
      {
	  using std::filesystem::perms;
	  auto show = [=](char op, perms perm)
	  {
	      std::cout << (perms::none == (perm & p) ? '-' : op);
	  };
	  show('r', perms::owner_read);
	  show('w', perms::owner_write);
	  show('x', perms::owner_exec);
	  show('r', perms::group_read);
	  show('w', perms::group_write);
	  show('x', perms::group_exec);
	  show('r', perms::others_read);
	  show('w', perms::others_write);
	  show('x', perms::others_exec);
	  std::cout << '\n';
      }

      int main()
      {
	  std::ofstream("test.txt"); // create file

	  std::cout << "Created file with permissions: ";
	  demo_perms(std::filesystem::status("test.txt").permissions());

	  std::filesystem::permissions(
	      "test.txt",
	      std::filesystem::perms::owner_all 	|	   std::filesys-
     tem::perms::group_all,
	      std::filesystem::perm_options::add
	  );

	  std::cout << "After adding u+rwx and g+rwx:  ";
	  demo_perms(std::filesystem::status("test.txt").permissions());

	  std::filesystem::remove("test.txt");
      }

Possible output:
      Created file with permissions: rw-r--r--
      After adding u+rwx and g+wrx:  rwxrwxr--

See also
	status	       determines file attributes
	symlink_status determines file attributes, checking the symlink target
	(C++17)        (function)
	(C++17)
	permissions    modifies file access permissions
	(C++17)        (function)

http://cppreference.com 	   2024.06.10	       std::filesystem::perms(3)

home | help