Namespaces
Variants

std::filesystem:: permissions

From cppreference.net
Definido en el encabezado <filesystem>
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: filesystem :: perm_options opts = perm_options :: replace ) ;
(1) (desde C++17)
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: error_code & ec ) noexcept ;
(2) (desde C++17)
(3) (desde C++17)

Cambia los permisos de acceso del archivo al que p resuelve, como si fuera mediante POSIX fchmodat . Los enlaces simbólicos se siguen a menos que perm_options::nofollow esté establecido en opts .

La segunda firma se comporta como si fuera llamada con opts establecido a perm_options :: replace .

Los efectos dependen de prms y opts como sigue:

  • Si opts es perm_options :: replace , los permisos del archivo se establecen exactamente a prms & std:: filesystem :: perms :: mask (es decir, se aplica cada bit válido de prms ).
  • Si opts es perm_options :: add , 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 opts es perm_options :: remove , 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 desactiva en los permisos del archivo).

opts debe tener solo una de las opciones replace , add , o remove configurada.

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
opts - opciones que controlan la acción tomada por esta función
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

(ninguno)

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con p como primer argumento de ruta y el código de error del sistema operativo como argumento de código de error.
2,3) Establece un parámetro std:: error_code & al 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.

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 propietario/grupo/todos, establecer cualquiera de los tres bits de escritura establece los tres).

Ejemplo

#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"); // crear archivo
    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::filesystem::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");
}

Salida posible:

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

Véase también

(C++17)
identifica permisos del sistema de archivos
(enum)
(C++17) (C++17)
determina atributos de archivo
determina atributos de archivo, verificando el destino del enlace simbólico
(function)