std::filesystem::permissions
Definido en el archivo de encabezado <filesystem>
|
||
void permissions( const std::filesystem::path& p, std::filesystem::perms prms, |
(desde C++17) | |
Cambia los permisos de acceso del archivo al que p
se resuelve, como si fuera por la función fchmodat
de POSIX. Se siguen los enlaces simbólicos a menos que perm_options::nofollow
esté configurado en opts
.
La segunda signatura se comporta como si se llamara con opts
configurado a perm_options::replace.
Los efectos dependen de prms
y opts
de la siguiente manera:
- Si
opts
es perm_options::replace, los permisos de archivo se configuran exactamente a prms & std::filesystem::perms::mask (que significa que se aplica cada bit válido deprms
). - Si
opts
es perm_options::add, los permisos de archivo se configuran exactamente a status(p).permissions() | (prms & perms::mask) (que significa que cualquier bit válido que está configurado enprms
, pero no en los permisos actuales del archivo, se agrega a los permisos del archivo). - Si
opts
es perm_options::remove, los permisos de archivo se configuran exactamente a status(p).permissions() & ~(prms & perms::mask) (que significa que cualquier bit válido que no está configurado enprms
, pero está configurado en los permisos actuales del archivo, se desconfigura en los permisos del archivo).
Se requiere que opts
tenga solo uno de replace
, add
, o que remove
esté configurado.
La sobrecarga que no lanza no tiene una acción especial si ocurre un error.
Contenido |
[editar] Parámetros
p | - | La ruta de acceso a examinar. |
prms | - | Los permisos a configurar, agregar o eliminar. |
opts | - | Las opciones que controlan la accón tomada por esta función. |
ec | - | El parámetro de salida para informe de errores en la sobrecarga que no lanza. |
[editar] Valor de retorno
(Ninguno)
[editar] Excepciones
La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p
como el primer argumento de la ruta de acceso y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.
[editar] Notas
Es posible que los permisos no se implementen necesariamente como bits, pero se tratan de esa manera conceptualmente.
Algunos bits de permiso pueden ignorarse en algunos sistemas, y cambiar algunos bits puede cambiar automáticamente otros (por ejemplo, en plataformas sin distinción de propietario/grupo/todos (owner/group/all), configurar cualquiera de los tres bits de escritura configura los tres).
[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) |
Identifica los permisos del sistema de archivos. (enum) |
(C++17)(C++17) |
Determina los atributos de archivo. Determina los atributos de archivo, verificando el objetivo del enlace simbólico. (función) |