Next: , Previous: , Up: Information about Files   [Contents][Index]


24.6.3 Truenames

ファイルの実名(truename)とは、全階層においてシンボリックリンクを残らずフォローした後、名前コンポーネントに出現する‘.’と‘..’を除いて簡略化した名前のことです。これは、そのファイルにたいする正規名(canonical name)の一種です。ファイルが常に一意な実名をもつ訳ではありません。あるファイルにたいする異なる実名の個数は、そのファイルにたいするハードリンクの個数と同じです。しかし、実名はシンボリックリンクによる名前の変動を解消するのに有用です。

Function: file-truename filename

この関数は、ファイルfilenameの実名をリターンする。引数が絶対ファイル名でない場合、この関数は最初にdefault-directoryにたいしてこれを展開する。

この関数は、環境変数を展開しない。これを行うのはsubstitute-in-file-nameだけである。Definition of substitute-in-file-nameを参照のこと。

名前コンポーネントに出現する‘..’に先行するシンボリックリンクリンクをフォローする必要がある場合は、直接間接を問わずexpand-file-nameを呼び出す前に、file-truenameを呼び出すこと。そうしないと、‘..’の直前にある名前コンポーネントは、file-truenameが呼び出される前に“簡略化”により取り除かれてしまう。expand-file-name呼び出しの必要を無くすため、file-truenameexpand-file-nameが行うのと同じ方法で‘~’を扱う。Functions that Expand Filenamesを参照のこと。

Function: file-chase-links filename &optional limit

この関数は、filenameで始まるシンボリックリンクを、シンボリックリンクではない名前のファイル名までフォローして、そのファイル名をリターンする。この関数は、親ディレクトリーの階層にあるシンボリックリンクをフォローしない

limitに数を指定した場合は、その数のリンクを追跡した後、この関数はたとえそれが依然としてシンボリックリンクであっても、それをリターンする。

file-chase-linksfile-truenameの違いを説明するために、/usr/fooがディレクトリー/home/fooへのシンボリックリンクであり、/home/foo/helloが(少なくともシンボリックリンクではない)通常ファイル、または存在しないファイルであるとします。この場合は以下のようになります:

(file-chase-links "/usr/foo/hello")
     ;; 親ディレクトリーのリンクはフォローしない
     ⇒ "/usr/foo/hello"
(file-truename "/usr/foo/hello")
     ;; /homeはシンボリックリンクではないと仮定
     ⇒ "/home/foo/hello"
Function: file-equal-p file1 file2

この関数は、ファイルfile1file2の名前が同じファイルの場合はtをリターンする。これは、リモートファイル名も適切な方法で処理することを除き、実名の比較と似ている。file1またはfile2が存在しない場合、リターン値は不定である。

Function: file-in-directory-p file dir

この関数は、fileがディレクトリーdir内のファイル、またはサブディレクトリーの場合は、tをリターンする。また、filedirが同じディレクトリーの場合も、tをリターンする。この関数は、2つのディレクトリーの実名を比較する。dirが既存のディレクトリーの名前でない場合、リターン値はnilである。