Spec-Zone.ru › C++

std::filesystem::create_hard_link

Определено в заголовке <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 являются двумя логическими именами, ссылающимися на один и тот же файл (они equivalent). Даже если исходное имя 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'); // create regular file
    fs::create_hard_link("sandbox/a", "sandbox/b");
    fs::remove("sandbox/a");
    // read from the original file via surviving hard link
    char c = std::ifstream("sandbox/b").get();
    std::cout << c << '\n';
    fs::remove_all("sandbox");
}

Вывод:

a

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/create_hard_link

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API