std::filesystem::create_hard_link
From cppreference.com
< cpp | filesystem
| ヘッダー <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, |
(2) | (C++17以降) |
指定されたパス link に、ターゲットを target とするハードリンクを作成します。これは POSIX の link() と同様です。パス名 target は存在しなければなりません。
作成されると、link と target は同じファイルを参照する2つの論理名になります(これらは equivalent です)。元の名前 target が削除されても、ファイルは存在し続け、link としてアクセス可能です。
目次 |
[編集] パラメータ
| target | - | リンク先のファイルまたはディレクトリのパス |
| link | - | 新しいハードリンクのパス |
| エラーコード | - | 例外を投げないオーバーロードでのエラー報告のための出力パラメータ |
[編集] 戻り値
(なし)
[編集] 例外
noexcept とマークされていないオーバーロードは、メモリ割り当てが失敗した場合に std::bad_alloc をスローする可能性があります。
1) 基盤となるOS APIエラーが発生した場合、std::filesystem::filesystem_error をスローします。この例外は、最初のパス引数として target、2番目のパス引数として link、エラーコード引数としてOSのエラーコードが指定されて構築されます。
[編集] 注記
一部のオペレーティングシステムでは、ハードリンクがまったくサポートされていないか、通常のファイルに対してのみサポートされています。
一部のファイルシステムでは、オペレーティングシステムに関係なくハードリンクをサポートしていません。例えば、メモリカードやフラッシュドライブで使用される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
[編集] 関連項目
| (C++17)(C++17) |
シンボリックリンクを作成する (関数) |
| (C++17) |
特定のファイルを参照しているハードリンクの数を返す (関数) |