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 при сбое выделения памяти.
std::filesystem::filesystem_error при ошибках базового API ОС; исключение создаётся с target в качестве первого аргумента-пути, link в качестве второго аргумента-пути и кодом ошибки ОС в качестве аргумента кода ошибки.std::error_code& код ошибки 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
См. также
|
(C++17)(C++17) | создаёт символическую ссылку (функция) |
|
(C++17) | возвращает количество жёстких ссылок на указанный файл (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/create_hard_link