std::filesystem::perms
Definido en el archivo de encabezado <filesystem> | ||
enumclass perms; | (desde C++17) | |
Este tipo representa permisos de acceso a archivo. perms
satisface los requerimientos de BitmaskType (que significa que los operadores de bit a bit operator&, operator|, operator^, operator~, operator&=, operator|=, y operator^= se definen para este tipo).
Los permisos de acceso modelan bits de permisos de POSIX, y cualquier permiso de archivo individual (como se informa por filesystem::status) son una combinación de algunos de los siguientes bits:
Contenido |
[editar]Constantes miembro
Constante miembro | Valor (octal) | Equivalente POSIX | Significado |
---|---|---|---|
Ninguno | 0 | No se establecen permisos de bits. | |
owner_read | 0400 | S_IRUSR | El dueño del archivo tiene permiso de lectura. |
owner_write | 0200 | S_IWUSR | El dueño del archivo tiene permiso de escritura. |
owner_exec | 0100 | S_IXUSR | El dueño del archivo tiene permiso de búsqueda y ejecución. |
owner_all | 0700 | S_IRWXU | El dueño del archivo tiene permisos de lectura, escritura, y búsqueda y ejecución. Equivalente a owner_read | owner_write | owner_exec. |
group_read | 040 | S_IRGRP | El grupo de usuarios de este archivo tiene permiso de lectura. |
group_write | 020 | S_IWGRP | El grupo de usuarios de este archivo tiene permiso de escritura. |
group_exec | 010 | S_IXGRP | El grupo de usuarios de este archivo tiene permiso de búsqueda y ejecución. |
group_all | 070 | S_IRWXG | El grupo de usuarios de este archivo tiene permisos de lectura, escritura, y búsqueda y ejecución. Equivalente a group_read | group_write | group_exec. |
others_read | 04 | S_IROTH | Otros usuarios tienen permiso de lectura. |
others_write | 02 | S_IWOTH | Otros usuarios tienen permiso de escritura. |
others_exec | 01 | S_IXOTH | Otros usuarios tienen permiso de búsqueda y ejecución. |
others_all | 07 | S_IRWXO | Otros usuarios tienen permisos de lectura, escritura, y búsqueda y ejecución. Equivalente a others_read | others_write | others_exec. |
all | 0777 | Todos los usuarios tienen permisos de lectura, escritura, y búsqueda y ejecución. Equivalente a owner_all | group_all | others_all. | |
set_uid | 04000 | S_ISUID | Establece el ID de usuario en el ID de usuario dueño del archivo durante la ejecución. |
set_gid | 02000 | S_ISGID | Establece el ID del grupo en el ID del grupo del archivo durante la ejecución. |
sticky_bit | 01000 | S_ISVTX | Quiere decir que está definido por la implementación, pero POSIX XSI especifica que cuando está establecido en un directorio, solo los dueños del archivo pueden borrar archivos incluso si el directorio puede escribirse por otros (se usa con /tmp). |
mask | 07777 | Todos los bits de permiso válidos. Equivalente a all | set_uid | set_gid | sticky_bit. |
Además, se definen las siguientes constantes de este tipo, que no representan permisos:
Constante miembro | Valor (hex) | Significado |
---|---|---|
unknown | 0xFFFF | Permisos desconocidos (por ejemplo, cuando se crea filesystem::file_status sin permisos). |
[editar]Notas
Los permisos pueden no ser necesariamente implementados como bits, pero se tratan de esa manera conceptualmente.
Algunos bits de permiso pueden ignorarse en algunos sistemas, y cambiar algunos bits puede cambiar otros automáticamente (por ejemplo, en plataformas sin distinción dueño/grupo/todos (owner/group/all), establecer cualquiera de los tres bits de escritura los establece todos).
[editar]Ejemplo
#include <fstream>#include <bitset>#include <iostream>#include <filesystem>namespace fs = std::filesystem; void demo_permisos(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("prueba.txt");// crear archivo std::cout<<"Archivo creado con permisos: "; demo_permisos(fs::status("prueba.txt").permissions()); fs::permissions("prueba.txt", fs::perms::owner_all| fs::perms::group_all, fs::perm_options::add); std::cout<<"Al agregar u+rwx y g+rwx: "; demo_permisos(fs::status("prueba.txt").permissions()); fs::remove("prueba.txt");}
Posible salida:
Archivo creado con permisos: rw-r--r-- Al agregar u+rwx y g+wrx: rwxrwxr--
[editar]Véase también
(C++17)(C++17) | Determina los atributos de archivo. Determina los atributos de archivo, verificando el objetivo del enlace simbólico. (función) |
(C++17) | Modifica los permisos de acceso a archivo. (función) |