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 は存在しなければなりません。
作成されると、link と target は同じファイルを指す 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] 関連項目
| シンボリックリンクを作成する (関数) | |
| 特定のファイルを参照しているハードリンクの数を返す (関数) |