Linuxでは、シンボリックリンクであることがわかっているファイルへのパスがある場合、それが指すファイルへのパスをプログラムで(CまたはC ++で)どのように決定しますか?
2 に答える
readlink
関数。を実行しますman 2 readlink
。この関数はPosixAPIの一部であるため、ほとんどすべてのUnixで機能するはずです。
パスがで始まる場合、'/'
その絶対シンボリックリンクであり、それが参照するファイルの完全な絶対パスがあります(これは別のシンボリックリンクである可能性があり、プロセスを再度繰り返す必要があります)。
パスが''で始まらない場合、/
それは相対リンクであり、シンボリックリンクが存在するディレクトリに対して相対的に解釈されます。パスを適切に組み合わせて実際のファイル名を把握するのはあなた次第です。
もちろん、実際にはパスではない情報を格納するためにシンボリックリンクが使用されることもあります。プログラムは、ロックの目的でPIDまたはその他のそのような情報をプログラムに格納する場合があります。シンボリックリンクを作成するための呼び出しは、NFSマウントされたファイルシステムで実行できるより信頼性の高いアトミック操作の1つです。
また、私のFedoraシステムではman 7 symlink
、シンボリックリンク、さまざまな状況でのシンボリックリンクの動作、およびシンボリックリンクを操作したり影響を受けたりする関数の概要について長い議論があります。
POSIXまたはBSDシステムで使用するreadlink()