std::filesystem:: create_hard_link
|
ヘッダーで定義
<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 | - | 新規ハードリンクのパス |
| ec | - | 例外を投げないオーバーロードにおけるエラー報告用出力パラメータ |
戻り値
(なし)
例外
noexceptでマークされていないオーバーロードは、
メモリ確保に失敗した場合に
std::bad_alloc
をスローする可能性があります。
注記
一部のオペレーティングシステムは、ハードリンクを全くサポートしていないか、または通常ファイルに対してのみサポートしています。
一部のファイルシステムは、オペレーティングシステムに関係なくハードリンクをサポートしていません:例えば、メモリカードやフラッシュドライブで使用されるFATファイルシステムがその例です。
一部のファイルシステムでは、ファイルごとのリンク数に制限があります。
ディレクトリへのハードリンクは通常、スーパーユーザーに制限されています。
ハードリンクは通常、ファイルシステムの境界を越えることができません。
特別なパス名であるドット ( "." ) は、その親ディレクトリへのハードリンクです。特別なパス名であるドットドット ".." は、その親の親であるディレクトリへのハードリンクです。
例
#include <filesystem> #include <fstream> #include <iostream> namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/subdir"); std::ofstream("sandbox/a").put('a'); // 通常ファイルを作成 fs::create_hard_link("sandbox/a", "sandbox/b"); fs::remove("sandbox/a"); // 残存するハードリンク経由で元のファイルから読み取り char c = std::ifstream("sandbox/b").get(); std::cout << c << '\n'; fs::remove_all("sandbox"); }
出力:
a
関連項目
|
(C++17)
(C++17)
|
シンボリックリンクを作成する
(関数) |
|
(C++17)
|
特定のファイルを参照するハードリンクの数を返す
(関数) |