Namespaces
Variants

std::filesystem:: create_hard_link

From ja.cppreference.net
ヘッダーで定義 <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 は同じファイルを参照する2つの論理名となります(これらは equivalent です)。元の名前 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'); // 通常ファイルを作成
    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

関連項目

シンボリックリンクを作成する
(関数)
特定のファイルを参照するハードリンクの数を返す
(関数)