名前空間
変種
操作

std::filesystem::create_hard_link

提供: cppreference.com
 
 
 
ヘッダ <filesystem> で定義
void create_hard_link( const std::filesystem::path& target,

                       const std::filesystem::path& link );
void create_hard_link( const std::filesystem::path& target,
                       const std::filesystem::path& link,

                       std::error_code& ec ) noexcept;
(C++17以上)

POSIX の link() によって行われたかのように、ターゲットが target に設定されたハードリンク link を作成します。 パス名 target は存在していなければなりません。

いったん作成されると、 linktarget は同じファイルを参照する2つの論理名になります (equivalent になります)。 元の名前 target が削除されても、ファイルは存在し続け、 link としてアクセス可能です。

目次

[編集] 引数

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

[編集] 戻り値

(なし)

[編集] 例外

std::error_code& 引数を取らないオーバーロードは、ベースとなる OS の API でエラーが発生した場合、第1パス引数に target、第2パス引数に link、エラーコード引数に OS のエラーコードを指定して構築された filesystem_error を投げます。 std::error_code& 引数を取るオーバーロードは、 OS の API 呼び出しが失敗した場合、その引数を OS の API のエラーコードに設定し、エラーが発生しない場合は ec.clear() を実行します。 noexcept 指定のないあらゆるオーバーロードは、メモリ確保に失敗した場合 std::bad_alloc を投げる可能性があります。

[編集] ノート

オペレーティングシステムによっては、ハードリンクがまったくサポートされなかったり、普通のファイルに対してだけしかサポートされなかったりします。

ファイルシステムによっては、オペレーティングシステムにかかわらず、ハードリンクがサポートされないことがあります。 例えば、メモリカードや USB メモリで使用される FAT ファイルシステムなどです。

ファイルシステムによっては、ファイルごとのリンク数に制限があることがあります。

ディレクトリに対するハードリンクの作成は、一般的にはスーパーユーザに限定されます。

ハードリンクは、一般的にはファイルシステム境界を越えることはできません。

特別なパス名ドット "." は、その親ディレクトリへのハードリンクです。 特別なパス名ドット-ドット ".." は、その親の親のディレクトリへのハードリンクです。

[編集]

#include <iostream>
#include <fstream>
#include <filesystem>
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

[編集] 関連項目

シンボリックリンクを作成します
(関数) [edit]
指定されたファイルを参照しているハードリンクの数を返します
(関数) [edit]