Espacios de nombres
Variantes
Acciones

std::filesystem::permissions

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
void permissions( const std::filesystem::path& p,

                  std::filesystem::perms prms,
                  std::filesystem::perm_options opts = perm_options::replace );
void permissions( const std::filesystem::path& p,
                  std::filesystem::perms prms,
                  std::error_code& ec ) noexcept;
void permissions( const std::filesystem::path& p,
                  std::filesystem::perms prms,
                  std::filesystem::perm_options opts,

                  std::error_code& ec );
(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 de prms).
  • 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 en prms, 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 en prms, 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) [editar]
(C++17)(C++17)
Determina los atributos de archivo.
Determina los atributos de archivo, verificando el objetivo del enlace simbólico.
(función) [editar]