Espacios de nombres
Variantes
Acciones

std::filesystem::perms

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
enum class perms;
(desde C++17)

Este tipo representa permisos de acceso a archivo. perms satisface los requerimientos de BitmaskType (que significa que los operadores de bit a bit operator&, operator|, operator^, operator~, operator&=, operator|=, y operator^= se definen para este tipo).

Los permisos de acceso modelan bits de permisos de POSIX, y cualquier permiso de archivo individual (como se informa por filesystem::status) son una combinación de algunos de los siguientes bits:

Contenido

[editar] Constantes miembro

Constante miembroValor (octal)Equivalente POSIXSignificado
Ninguno0No se establecen permisos de bits.
owner_read0400S_IRUSREl dueño del archivo tiene permiso de lectura.
owner_write0200S_IWUSREl dueño del archivo tiene permiso de escritura.
owner_exec0100S_IXUSREl dueño del archivo tiene permiso de búsqueda y ejecución.
owner_all0700S_IRWXUEl dueño del archivo tiene permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a owner_read | owner_write | owner_exec.

group_read040S_IRGRPEl grupo de usuarios de este archivo tiene permiso de lectura.
group_write020S_IWGRPEl grupo de usuarios de este archivo tiene permiso de escritura.
group_exec010S_IXGRPEl grupo de usuarios de este archivo tiene permiso de búsqueda y ejecución.
group_all070S_IRWXGEl grupo de usuarios de este archivo tiene permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a group_read | group_write | group_exec.

others_read04S_IROTHOtros usuarios tienen permiso de lectura.
others_write02S_IWOTHOtros usuarios tienen permiso de escritura.
others_exec01S_IXOTHOtros usuarios tienen permiso de búsqueda y ejecución.
others_all07S_IRWXOOtros usuarios tienen permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a others_read | others_write | others_exec.

all0777Todos los usuarios tienen permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a owner_all | group_all | others_all.

set_uid04000S_ISUIDEstablece el ID de usuario en el ID de usuario dueño del archivo durante la ejecución.
set_gid02000S_ISGIDEstablece el ID del grupo en el ID del grupo del archivo durante la ejecución.
sticky_bit01000S_ISVTXQuiere decir que está definido por la implementación, pero POSIX XSI especifica que cuando está establecido en un directorio, solo los dueños del archivo pueden borrar archivos incluso si el directorio puede escribirse por otros (se usa con /tmp).
mask07777Todos los bits de permiso válidos.

Equivalente a all | set_uid | set_gid | sticky_bit.

Además, se definen las siguientes constantes de este tipo, que no representan permisos:

Constante miembroValor (hex)Significado
unknown0xFFFFPermisos desconocidos (por ejemplo, cuando se crea filesystem::file_status sin permisos).

[editar] Notas

Los permisos pueden no ser necesariamente implementados como bits, pero se tratan de esa manera conceptualmente.

Algunos bits de permiso pueden ignorarse en algunos sistemas, y cambiar algunos bits puede cambiar otros automáticamente (por ejemplo, en plataformas sin distinción dueño/grupo/todos (owner/group/all), establecer cualquiera de los tres bits de escritura los establece todos).

[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)(C++17)
Determina los atributos de archivo.
Determina los atributos de archivo, verificando el objetivo del enlace simbólico.
(función) [editar]
Modifica los permisos de acceso a archivo.
(función) [editar]