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,
|
(2) | (начиная с C++17) |
Создает жесткую ссылку
link
с целевым объектом, установленным в
target
как если бы с помощью POSIX
link()
: путь
target
должен существовать.
После создания, link и target являются двумя логическими именами, которые ссылаются на один и тот же файл (они эквивалентны ). Даже если исходное имя target будет удалено, файл продолжает существовать и доступен под именем link .
Содержание |
Параметры
| target | - | путь к файлу или директории для создания ссылки |
| link | - | путь новой жесткой ссылки |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке |
Возвращаемое значение
(нет)
Исключения
Любая перегрузка, не помеченная
noexcept
, может выбрасывать
std::bad_alloc
при неудачном выделении памяти.
Примечания
Некоторые операционные системы не поддерживают жёсткие ссылки вообще или поддерживают их только для обычных файлов.
Некоторые файловые системы не поддерживают жёсткие ссылки независимо от операционной системы: например, файловая система 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
Смотрите также
|
(C++17)
(C++17)
|
создает символическую ссылку
(функция) |
|
(C++17)
|
возвращает количество жестких ссылок, указывающих на конкретный файл
(функция) |