std::experimental::filesystem:: permissions
|
Definido en el encabezado
<experimental/filesystem>
|
||
|
void
permissions
(
const
path
&
p, perms prms
)
;
void permissions ( const path & p, perms prms, error_code & ec ) ; |
(filesystem TS) | |
Cambia los permisos de acceso del archivo al que
p
resuelve, como si fuera mediante POSIX
fchmodat
. Los enlaces simbólicos se siguen si
prms::resolve_symlinks
está establecido.
Los efectos dependen de prms de la siguiente manera:
- Si no se establece ni perms :: add_perms ni perms :: remove_perms , los permisos del archivo se establecen exactamente a prms & fs :: perms :: mask (es decir, se aplica cada bit válido de prms ).
- Si se establece perms :: add_perms , los permisos del archivo se establecen exactamente a status ( p ) . permissions ( ) | ( prms & perms :: mask ) (es decir, cualquier bit válido que esté establecido en prms , pero no en los permisos actuales del archivo, se añade a los permisos del archivo).
- Si se establece perms :: remove_perms , los permisos del archivo se establecen exactamente a status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) (es decir, cualquier bit válido que esté desactivado en prms , pero establecido en los permisos actuales del archivo, se elimina de los permisos del archivo).
- Si se establecen tanto perms :: add_perms como perms :: remove_perms , se produce un error.
La sobrecarga que no lanza excepciones no tiene ninguna acción especial en caso de error.
Contenidos |
Parámetros
| p | - | ruta a examinar |
| prms | - | permisos a establecer, agregar o eliminar |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga que no lanza excepciones |
Valor de retorno
(ninguno)
Excepciones
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload hasNotas
Los permisos pueden no implementarse necesariamente como bits, pero se tratan conceptualmente de esa manera.
Algunos bits de permisos pueden ser ignorados en algunos sistemas, y cambiar algunos bits puede automáticamente cambiar otros (por ejemplo, en plataformas sin distinción entre propietario/grupo/todos, establecer cualquiera de los tres bits de escritura establece los tres).
Ejemplo
#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"); // crear archivo std::cout << "Archivo creado con permisos: "; 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 << "Después de agregar o+rwx y g+rwx: "; demo_perms(fs::status("test.txt").permissions()); fs::remove("test.txt"); }
Salida posible:
Archivo creado con permisos: rw-r--r-- Después de agregar o+rwx y g+rwx: rwxrwxr--
Véase también
|
identifica permisos del sistema de archivos
(enum) |
|
|
determina atributos de archivo
determina atributos de archivo, verificando el destino del enlace simbólico (function) |