シンボリックリンクの名前を指定すると、リンクが指すファイルまたはディレクトリの名前を出力するCプログラムを作成しようとしています。開始方法に関する提案はありますか?
4 に答える
readlink()
言及されている機能は答えの一部です。ただし、その恐ろしいインターフェイスに注意する必要があります (応答文字列を null で終了しません!)。
SO 1563186realpath()
で使用方法が説明されている関数を確認することもできます。IIUG Software Archive で「 linkpath 」のコードを参照することもできます。シンボリック リンクが解決されたときに検出されたすべてのディレクトリのセキュリティを分析します。プログラムをテストするときのチェックの 1 つは、名前が同じファイルに解決されることを確認することでした。readlink()
lstat()
stat()
realpath()
POSIX 関数をサポートする環境があることを確認し、 readlinkunistd.h
関数を組み込んで使用してください。
プラットフォームにもよりますstat()
が、fstat()
おそらく最初に試すものです。Linux または cygwin を使用している場合、stat
プログラムは、システム API 呼び出しから何を期待するかについての合理的なアイデアを提供します (ほとんどの場合、テキスト ダンプが提供されます)。
必要なシステムコールはreadlink()です。リンクへのパスを取得し、リンクに格納されている文字列(ファイルシステムで常に有効なパスとは限りません!)を返します。詳細については、manページ(「man2readlink」)を確認してください。
あなたの質問にはいくつかのあいまいさがあります。ファイルシステムの「実際の」パスをどのように伝えるかを尋ねているかもしれませんが、これはもう少し複雑です。