Namespaces
Variants

std::experimental::filesystem:: perms

From cppreference.net
Definido en el encabezado <experimental/filesystem>
enum class perms ;
(filesystem TS)

Este tipo representa los permisos de acceso a archivos. perms satisface los requisitos de BitmaskType (lo que significa que los operadores bit a bit operator & , operator | , operator ^ , operator~ , operator & = , operator | = , y operator ^ = están definidos para este tipo).

Modelo de permisos de acceso POSIX permission bits , y cualquier permiso individual de archivo (como se reporta por status ) son una combinación de algunos de los siguientes bits:

Contenidos

Constantes de miembro

Constante de miembro Valor (octal) Equivalente POSIX Significado
none 0 No hay bits de permiso establecidos
owner_read 0400 S_IRUSR El propietario del archivo tiene permiso de lectura
owner_write 0200 S_IWUSR El propietario del archivo tiene permiso de escritura
owner_exec 0100 S_IXUSR El propietario del archivo tiene permiso de ejecución/búsqueda
owner_all 0700 S_IRWXU El propietario del archivo tiene permisos de lectura, escritura y ejecución/búsqueda

Equivalente a owner_read | owner_write | owner_exec

group_read 040 S_IRGRP El grupo de usuarios del archivo tiene permiso de lectura
group_write 020 S_IWGRP El grupo de usuarios del archivo tiene permiso de escritura
group_exec 010 S_IXGRP El grupo de usuarios del archivo tiene permiso de ejecución/búsqueda
group_all 070 S_IRWXG El grupo de usuarios del archivo tiene permisos de lectura, escritura y ejecución/búsqueda

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 ejecución/búsqueda
others_all 07 S_IRWXO Otros usuarios tienen permisos de lectura, escritura y ejecución/búsqueda

Equivalente a others_read | others_write | others_exec

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

Equivalente a owner_all | group_all | others_all

set_uid 04000 S_ISUID Establecer ID de usuario al ID del propietario del archivo durante la ejecución
set_gid 02000 S_ISGID Establecer ID de grupo al ID del grupo de usuarios del archivo durante la ejecución
sticky_bit 01000 S_ISVTX Significado definido por la implementación, pero POSIX XSI especifica que cuando se establece en un directorio, solo los propietarios de archivos pueden eliminar archivos incluso si el directorio tiene permisos de escritura para otros (usado 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 de miembro Valor (hex) Significado
unknown 0xFFFF Permisos desconocidos (ej. cuando file_status se crea sin permisos)
add_perms 0x10000 Bit de control que instruye a permissions a agregar, pero no limpiar bits de permiso
remove_perms 0x20000 Bit de control que instruye a permissions a limpiar, pero no agregar bits de permiso
resolve_symlinks 0x40000 Bit de control que instruye a permissions a resolver enlaces simbólicos

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

determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico
(función)
modifica los permisos de acceso al archivo
(función)