名前空間
変種
操作

std::filesystem::create_hard_link

From 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 は同じファイルを参照する2つの論理名になります(これらは equivalent です)。元の名前 target が削除されても、ファイルは存在し続け、link としてアクセス可能です。

目次

[編集] パラメータ

target - リンク先のファイルまたはディレクトリのパス
link - 新しいハードリンクのパス
エラーコード - 例外を投げないオーバーロードでのエラー報告のための出力パラメータ

[編集] 戻り値

(なし)

[編集] 例外

noexcept とマークされていないオーバーロードは、メモリ割り当てが失敗した場合に std::bad_alloc をスローする可能性があります。

1) 基盤となるOS APIエラーが発生した場合、std::filesystem::filesystem_error をスローします。この例外は、最初のパス引数として target、2番目のパス引数として 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

[編集] 関連項目

シンボリックリンクを作成する
(関数) [編集]
特定のファイルを参照しているハードリンクの数を返す
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)