Namespaces
Variants

std::filesystem:: permissions

From cppreference.net
헤더 파일에 정의됨 <filesystem>
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: filesystem :: perm_options opts = perm_options :: replace ) ;
(1) (C++17부터)
void permissions ( const std:: filesystem :: path & p,

std:: filesystem :: perms prms,

std:: error_code & ec ) noexcept ;
(2) (C++17부터)
(3) (C++17부터)

p 가 해석되는 파일의 접근 권한을 변경합니다. POSIX fchmodat 과 유사하게 동작합니다. opts 에서 perm_options::nofollow 가 설정되지 않은 경우 심볼릭 링크를 따릅니다.

두 번째 시그니처는 opts perm_options :: replace 로 설정된 상태로 호출된 것처럼 동작합니다.

효과는 다음과 같이 prms opts 에 따라 달라집니다:

  • 만약 opts perm_options :: replace 인 경우, 파일 권한은 정확히 prms & std:: filesystem :: perms :: mask 로 설정됩니다 (즉, prms 의 모든 유효한 비트가 적용됩니다).
  • 만약 opts perm_options :: add 인 경우, 파일 권한은 정확히 status ( p ) . permissions ( ) | ( prms & perms :: mask ) 로 설정됩니다 (즉, prms 에 설정되어 있지만 파일의 현재 권한에는 없는 모든 유효한 비트가 파일 권한에 추가됩니다).
  • 만약 opts perm_options :: remove 인 경우, 파일 권한은 정확히 status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) 로 설정됩니다 (즉, prms 에서 지워져 있지만 파일의 현재 권한에는 설정된 모든 유효한 비트가 파일 권한에서 지워집니다).

opts replace , add , remove 중 하나만 설정되어야 합니다.

비예외 오버로드는 오류 시 특별한 동작을 하지 않습니다.

목차

매개변수

p - 검사할 경로
prms - 설정, 추가 또는 제거할 권한
opts - 이 함수의 동작을 제어하는 옵션들
ec - 비예외 오버로드에서 오류 보고를 위한 출력 매개변수

반환값

(없음)

예외

noexcept 로 표시되지 않은 모든 오버로드는 메모리 할당이 실패할 경우 std::bad_alloc 을(를) throw할 수 있습니다.

1) 기본 OS API 오류 발생 시 std::filesystem::filesystem_error 를 throw하며, p 를 첫 번째 경로 인수로, OS 오류 코드를 오류 코드 인수로 사용하여 생성됩니다.
2,3) OS API 호출이 실패할 경우 std:: error_code & 매개변수를 OS API 오류 코드로 설정하고, 오류가 발생하지 않을 경우 ec. clear ( ) 를 실행합니다.

참고 사항

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

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

예제

#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)
파일 시스템 권한 식별
(enum)
(C++17) (C++17)
파일 속성 결정
심링크 대상 확인하며 파일 속성 결정
(function)