Namespaces
Variants

std::filesystem:: perms

From cppreference.net
헤더 파일에 정의됨 <filesystem>
enum class perms ;
(C++17부터)

이 타입은 파일 접근 권한을 나타냅니다.

perms BitmaskType 요구 사항을 충족합니다 (이는 비트 연산자 operator & , operator | , operator ^ , operator~ , operator & = , operator | = , 그리고 operator ^ = 가 이 타입에 대해 정의됨을 의미합니다). none 은 빈 비트마스크를 나타내며, 다른 모든 열거자는 서로 다른 비트마스크 요소를 나타냅니다.

접근 권한 모델 POSIX 권한 비트 와 개별 파일 권한들( filesystem::status 에 의해 보고되는)은 다음 비트들 중 일부의 조합입니다:

목차

멤버 상수

멤버 상수 값 (8진수) POSIX 동등값 의미
none 0 설정된 권한 비트 없음
owner_read 0400 S_IRUSR 파일 소유자 읽기 권한
owner_write 0200 S_IWUSR 파일 소유자 쓰기 권한
owner_exec 0100 S_IXUSR 파일 소유자 실행/검색 권한
owner_all 0700 S_IRWXU 파일 소유자 읽기, 쓰기, 실행/검색 권한 모두

다음과 동등함: owner_read | owner_write | owner_exec

group_read 040 S_IRGRP 파일 사용자 그룹 읽기 권한
group_write 020 S_IWGRP 파일 사용자 그룹 쓰기 권한
group_exec 010 S_IXGRP 파일 사용자 그룹 실행/검색 권한
group_all 070 S_IRWXG 파일 사용자 그룹 읽기, 쓰기, 실행/검색 권한 모두

다음과 동등함: group_read | group_write | group_exec

others_read 04 S_IROTH 다른 사용자 읽기 권한
others_write 02 S_IWOTH 다른 사용자 쓰기 권한
others_exec 01 S_IXOTH 다른 사용자 실행/검색 권한
others_all 07 S_IRWXO 다른 사용자 읽기, 쓰기, 실행/검색 권한 모두

다음과 동등함: others_read | others_write | others_exec

all 0777 모든 사용자 읽기, 쓰기, 실행/검색 권한

다음과 동등함: owner_all | group_all | others_all

set_uid 04000 S_ISUID 실행 시 사용자 ID를 파일 소유자 사용자 ID로 설정
set_gid 02000 S_ISGID 실행 시 그룹 ID를 파일 사용자 그룹 ID로 설정
sticky_bit 01000 S_ISVTX 구현 정의 의미를 가지나, POSIX XSI는 디렉토리에 설정된 경우 다른 사용자에게 쓰기 권한이 있어도 파일 소유자만 파일을 삭제할 수 있도록 지정함 ( / tmp 와 함께 사용됨)
mask 07777 모든 유효한 권한 비트

다음과 동등함: all | set_uid | set_gid | sticky_bit

또한, 권한을 나타내지 않는 이 유형의 다음과 같은 상수들이 정의되어 있습니다:

멤버 상수 값 (16진수) 의미
unknown 0xFFFF 알 수 없는 권한 (예: filesystem::file_status 가 권한 없이 생성된 경우)

참고 사항

권한은 반드시 비트로 구현되지는 않지만, 개념적으로는 그렇게 취급됩니다.

일부 권한 비트는 일부 시스템에서 무시될 수 있으며, 일부 비트를 변경하면 자동으로 다른 비트가 변경될 수 있습니다(예: 소유자/그룹/전체 구분이 없는 플랫폼에서 세 가지 쓰기 비트 중 하나를 설정하면 세 비트 모두가 설정됨).

예제

#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"); // 파일 생성
    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");
}

가능한 출력:

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

참고 항목

(C++17) (C++17)
파일 속성을 결정합니다
심볼릭 링크 대상을 확인하여 파일 속성을 결정합니다
(function)
파일 접근 권한을 수정합니다
(function)