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 miembro Valor (octal) Equivalente POSIX Significado
Ninguno 0 No se establecen permisos de bits.
owner_read 0400 S_IRUSR El dueño del archivo tiene permiso de lectura.
owner_write 0200 S_IWUSR El dueño del archivo tiene permiso de escritura.
owner_exec 0100 S_IXUSR El dueño del archivo tiene permiso de búsqueda y ejecución.
owner_all 0700 S_IRWXU El dueño del archivo tiene permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a owner_read | owner_write | owner_exec.

group_read 040 S_IRGRP El grupo de usuarios de este archivo tiene permiso de lectura.
group_write 020 S_IWGRP El grupo de usuarios de este archivo tiene permiso de escritura.
group_exec 010 S_IXGRP El grupo de usuarios de este archivo tiene permiso de búsqueda y ejecución.
group_all 070 S_IRWXG El 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_read 04 S_IROTH Otros usuarios tienen permiso de lectura.
others_write 02 S_IWOTH Otros usuarios tienen permiso de escritura.
others_exec 01 S_IXOTH Otros usuarios tienen permiso de búsqueda y ejecución.
others_all 07 S_IRWXO Otros usuarios tienen permisos de lectura, escritura, y búsqueda y ejecución.

Equivalente a others_read | others_write | others_exec.

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

Equivalente a owner_all | group_all | others_all.

set_uid 04000 S_ISUID Establece el ID de usuario en el ID de usuario dueño del archivo durante la ejecución.
set_gid 02000 S_ISGID Establece el ID del grupo en el ID del grupo del archivo durante la ejecución.
sticky_bit 01000 S_ISVTX Quiere 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).
mask 07777 Todos 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 miembro Valor (hex) Significado
unknown 0xFFFF Permisos 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]