Namespaces
Variants

std::filesystem:: create_hard_link

From cppreference.net
헤더 파일에 정의됨 <filesystem>
void create_hard_link ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (C++17부터)
void create_hard_link ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

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

하드 링크를 생성하며, 그 대상은 target 으로 설정됩니다. 이는 POSIX link() 함수와 유사하게 동작합니다: 경로명 target 이 반드시 존재해야 합니다.

생성된 후, link target 는 동일한 파일을 참조하는 두 개의 논리적 이름입니다(이들은 equivalent 입니다). 원본 이름인 target 이 삭제되더라도 파일은 계속 존재하며 link 로 접근 가능합니다.

목차

매개변수

target - 연결할 파일 또는 디렉터리의 경로
link - 새 하드 링크의 경로
ec - non-throwing 오버로드에서 오류 보고를 위한 출력 매개변수

반환값

(없음)

예외

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

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

참고 사항

일부 운영 체제는 하드 링크를 전혀 지원하지 않거나 일반 파일에 대해서만 지원합니다.

일부 파일 시스템은 운영 체제와 관계없이 하드 링크를 지원하지 않습니다: 예를 들어 메모리 카드와 플래시 드라이브에 사용되는 FAT 파일 시스템이 그렇습니다.

일부 파일 시스템은 파일당 링크 수를 제한합니다.

디렉터리에 대한 하드 링크 생성은 일반적으로 슈퍼유저로 제한됩니다.

하드 링크는 일반적으로 파일 시스템 경계를 넘을 수 없습니다.

특수 경로명 점( "." )은 부모 디렉토리에 대한 하드 링크입니다. 특수 경로명 점-점 ".." 은 부모 디렉토리의 상위 디렉토리를 가리키는 하드 링크입니다.

예제

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/subdir");
    std::ofstream("sandbox/a").put('a'); // 일반 파일 생성
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // 살아남은 하드 링크를 통해 원본 파일에서 읽기
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

출력:

a

참고 항목

심볼릭 링크를 생성함
(함수)
특정 파일을 참조하는 하드 링크의 수를 반환함
(함수)