名前空間
変種
操作

std::experimental::filesystem::create_hard_link

From cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
ヘッダー <experimental/filesystem> で定義されています
void create_hard_link( const path& target, const path& link );
void create_hard_link( const path& target, const path& link, error_code& ec );
(filesystem TS)

指定された target を指すハードリンク link を作成します。これは、POSIX の link() と同様の方法で行われます。パス名 target は存在しなければなりません。

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

目次

[edit] パラメータ

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

[edit] 戻り値

(なし)

[edit] 例外

error_code& パラメータを取らないオーバーロードは、基盤となる OS API エラーが発生した場合に、target を最初の引数、link を 2 番目の引数、OS エラーコードをエラーコード引数として構築された filesystem_error をスローします。メモリ割り当てが失敗した場合、std::bad_alloc がスローされる可能性があります。 error_code& パラメータを取るオーバーロードは、OS API 呼び出しが失敗した場合にそれを OS API エラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードは
noexcept 指定:  
noexcept
  

[edit] 注記

一部のオペレーティングシステムでは、ハードリンクをまったくサポートしていないか、または通常のファイルに対してのみサポートしています。

一部のファイルシステムでは、オペレーティングシステムに関係なくハードリンクをサポートしていません。たとえば、メモリカードやフラッシュドライブで使用される FAT ファイルシステムなどです。

一部のファイルシステムでは、ファイルあたりのリンク数を制限しています。

ディレクトリへのハードリンクは、通常、スーパーユーザーに制限されています。

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

特殊なパス名ドット(".")は、その親ディレクトリへのハードリンクです。特殊なパス名ドットドット("..")は、その親の親であるディレクトリへのハードリンクです。

[edit]

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::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] 関連項目

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