std::filesystem::create_hard_link
来自cppreference.com
< cpp | filesystem
| 在标头 <filesystem> 定义
|
||
| |
(1) | (C++17 起) |
| |
(2) | (C++17 起) |
创建硬链接 link,将其目标设为 target,如同用 POSIX link():路径名 target 必须存在。
一旦创建,link 与 target 就是指代同一文件的两个逻辑名(它们等价)。即使原名 target 被删除,文件也会继续存在,并可以 link 访问。
参数
| target | - | 要链接到的文件或目录名 |
| link | - | 新硬链接的路径 |
| ec | - | 不抛出重载中报告错误的输出形参 |
返回值
(无)
异常
若内存分配失败,则任何不标记为 noexcept 的重载可能抛出 std::bad_alloc 。
1) 抛出 std::filesystem::filesystem_error,构造时以
target 为第一路径实参,以 link 为第二路径实参,并以OS 错误码为错误码实参。注解
一些操作系统完全不支持硬链接,或仅对常规文件支持。
某些文件系统不支持硬链接,无关乎操作系统,例如用于某些内存卡和闪存驱动器的 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) |
返回指代特定文件的硬链接数 (函数) |