名稱空間
變體
操作

std::filesystem::create_hard_link

來自 cppreference.com
 
 
 
定義於標頭檔案 <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 必須存在。

建立後,linktarget 是指同一檔案的兩個邏輯名稱(它們是 等價的)。即使原始名稱 target 被刪除,該檔案仍然存在並可以透過 link 訪問。

目錄

[編輯] 引數

target - 要連結到的檔案或目錄的路徑
link - 新硬連結的路徑
ec - 非丟擲過載中用於錯誤報告的出參

[編輯] 返回值

(無)

[編輯] 異常

任何未標記為 noexcept 的過載都可能在記憶體分配失敗時丟擲 std::bad_alloc

1) 在底層 OS API 錯誤時丟擲 std::filesystem::filesystem_error,構造時以 target 作為第一個路徑引數,link 作為第二個路徑引數,以及 OS 錯誤碼作為錯誤碼引數。
2) 如果 OS API 呼叫失敗,則將 std::error_code& 引數設定為 OS 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

[編輯] 參閱

建立符號連結
(函式) [編輯]
返回引用特定檔案的硬連結數量
(函式) [編輯]