Namespaces
Variants

std::experimental::filesystem:: permissions

From cppreference.net
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 has
noexcept especificación:
noexcept

Notas

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)