Namespaces
Variants

std::filesystem:: read_symlink

From cppreference.net
ヘッダーで定義 <filesystem>
(1) (C++17以降)
(2) (C++17以降)

パス p がシンボリックリンクを参照している場合、そのシンボリックリンクのターゲットを参照する新しいパスオブジェクトを返します。

p がシンボリックリンクを参照していない場合はエラーです。

例外を送出しないオーバーロードは、エラー時に空のパスを返します。

目次

パラメータ

p - シンボリックリンクへのパス
ec - 非スローオーバーロードでのエラー報告用出力パラメータ

戻り値

シンボリックリンクのターゲット(必ずしも存在するとは限りません)。

例外

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()
{
    for (fs::path p : {"/usr/bin/gcc", "/bin/cat", "/bin/mouse"})
    {
        std::cout << p;
        fs::exists(p) ?
            fs::is_symlink(p) ?
                std::cout << " -> " << fs::read_symlink(p) << '\n' :
                std::cout << " exists but it is not a symlink\n" :
            std::cout << " does not exist\n";
    }
}

出力例:

"/usr/bin/gcc" -> "gcc-5"
"/bin/cat" exists but it is not a symlink
"/bin/mouse" does not exist

関連項目

(C++17)
引数がシンボリックリンクを参照しているかどうかをチェックする
(関数)
シンボリックリンクを作成する
(関数)
シンボリックリンクをコピーする
(関数)
(C++17) (C++17)
ファイル属性を決定する
シンボリックリンクのターゲットをチェックしてファイル属性を決定する
(関数)