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)

Создает жесткую ссылку link с целевым объектом, установленным в target как если бы с помощью POSIX link() : путь target должен существовать.

После создания, link и target являются двумя логическими именами, которые ссылаются на один и тот же файл (они эквивалентны ). Даже если исходное имя target будет удалено, файл продолжает существовать и доступен под именем link .

Содержание

Параметры

target - путь к файлу или директории для создания ссылки
link - путь новой жесткой ссылки
ec - выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке

Возвращаемое значение

(нет)

Исключения

Любая перегрузка, не помеченная noexcept , может выбрасывать std::bad_alloc при неудачном выделении памяти.

1) Выбрасывает std::filesystem::filesystem_error при ошибках в нижележащем API ОС, создавая исключение с target в качестве первого аргумента пути, link в качестве второго аргумента пути и кодом ошибки ОС в качестве аргумента кода ошибки.
2) Устанавливает параметр std:: error_code & в код ошибки API ОС при сбое вызова 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

Смотрите также

создает символическую ссылку
(функция)
возвращает количество жестких ссылок, указывающих на конкретный файл
(функция)