Namespaces
Variants

std::filesystem:: hard_link_count

From cppreference.net
ヘッダーで定義 <filesystem>
std:: uintmax_t hard_link_count ( const std:: filesystem :: path & p ) ;
(1) (C++17以降)
std:: uintmax_t hard_link_count ( const std:: filesystem :: path & p,
std:: error_code & ec ) noexcept ;
(2) (C++17以降)

パス p によって識別されるファイルシステムオブジェクトのハードリンク数を返します。

例外を送出しないオーバーロードは、エラー時に static_cast < uintmax_t > ( - 1 ) を返します。

目次

パラメータ

p - 検査対象のパス
ec - 例外を投げないオーバーロードにおけるエラー報告用出力パラメータ

戻り値

p のハードリンク数。

例外

noexcept でマークされていないオーバーロードは、 メモリ確保に失敗した場合 std::bad_alloc をスローする可能性があります。

1) 基盤となるOS APIエラーが発生した場合 std::filesystem::filesystem_error をスローします。これは p を第一パス引数、OSエラーコードをエラーコード引数として構築されます。
2) オペレーティングシステムAPI呼び出しが失敗した場合、 std:: error_code & パラメータにOS APIエラーコードを設定し、エラーが発生しなかった場合は ec. clear ( ) を実行します。

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    // POSIXスタイルのファイルシステムでは、各ディレクトリは少なくとも2つのハードリンクを持つ:
    // 自身と特別なメンバーパス名 "."
    fs::path p = fs::current_path();
    std::cout << "Number of hard links for current path is "
              << fs::hard_link_count(p) << '\n';
    // 各 ".." は親ディレクトリへのハードリンクであるため、任意のディレクトリの
    // ハードリンクの総数は 2 + 直接のサブディレクトリの数となる
    p = fs::current_path() / ".."; // 各ドットドットは親ディレクトリへのハードリンク
    std::cout << "Number of hard links for .. is "
              << fs::hard_link_count(p) << '\n';
}

出力例:

Number of hard links for current path is 2
Number of hard links for .. is 3

関連項目

ハードリンクを作成する
(関数)
ディレクトリエントリが参照するファイルを参照しているハードリンクの数を返す
( std::filesystem::directory_entry の公開メンバ関数)