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


24.6.1 Testing Accessibility

以下の関数は、あるファイルを読み取り、書き込み、実行するためのパーミッションをテストします。明示しない限り、これらの関数はファイル名引数にたいするシンボリックリンクを、すべてのレベル(ファイル自身のレベルおよび親ディレクトリーのレベル)において再帰的にフォローします。

いくつかのオペレーティングシステムでは、ACL(Access Control Lists: アクセス制御リスト)のような機構を通じて、より複雑なアクセスパーミッションセットが指定できます。それらのパーミッションにたいする問い合わせやセットの方法については、Extended Attributesを参照してください。

Function: file-exists-p filename

この関数は、ファイル名filenameが存在しているようならtをリターンする。これは、そのファイルが読み取り可能である必要はなく、ファイルの属性を調べることが可能なこと意味する(UnixおよびGNU/Linuではなく、そのファイルが存在し、かつそのファイルを含むディレクトリーの実行パーミッションをもつ場合にtとなり、そのファイル自体のパーミッションは無関係である)。

ファイルが存在しない、またはACLポリシーがファイル属性を調べることを禁止する場合、この関数はnilをリターンする。

ディレクトリーはファイルなので、ディレクトリー名が与えられた場合、file-exists-ptをリターンする。しかし、シンボリックリンクは特別に扱われる。file-exists-pはターゲットファイルが存在する場合のみ、シンボリックリンクにたいしてtをリターンする。

Function: file-readable-p filename

この関数は、filenameという名前のファイルが存在し、それを読み取ることが可能な場合はtをリターンする。それ以外はnilをリターンする。

Function: file-executable-p filename

この関数は、filenameという名前のファイルが存在し、それを実行することが可能な場合はtをリターンする。それ以外はnilをリターンする。UnixおよびGNU/Linuxシステムでは、そのファイルがディレクトリーの場合、実行パーミッションはディレクトリー内のファイルの存在と属性をチェックでき、ファイルのモードが許せばオープンできることを意味する。

Function: file-writable-p filename

この関数は、filenameという名前のファイルに書き込み可能、または作成可能可能な場合はtをリターンする。それ以外はnilをリターンする。ファイルが存在し、それに書き込むことができるなら、ファイルは書き込み可能である。ファイルが存在せず、指定されたディレクトリーが存在して、そのディレクトリーに書き込むことができるなら、書き込み可能である。

以下の例では、fooは親ディレクトリーが存在しないので、たとえユーザーがそのディレクトリーを作成可能であっても、ファイルは書き込み可能ではない。

(file-writable-p "~/no-such-dir/foo")
     ⇒ nil
Function: file-accessible-directory-p dirname

この関数は、ファイルとしての名前がdirnameであるようなディレクトリー内にある既存のファイルをオープンするパーミッションをもつ場合は、tをリターンする。それ以外(またはそのようなディレクトリーが存在しない場合)はnilをリターンする。dirnameの値はディレクトリー名(/foo/など)、または名前がディレクトリー(最後のスラッシュがない/fooなど)であるようなファイルである。

たとえば、以下では/foo/内の任意のファイルを読み取る試みは、エラーになると推測される:

(file-accessible-directory-p "/foo")
     ⇒ nil
Function: access-file filename string

この関数は、読み取り用にファイルfilenameをオープンして、クローズした後にnilをリターンする。しかし、オープンに失敗した場合は、stringをエラーメッセージのテキストに使用して、エラーをシグナルする。

Function: file-ownership-preserved-p filename &optional group

この関数は、ファイルfilenameを削除して、それを新たに作成しても、そのファイルの所有者が変更されずに維持される場合は、tをリターンする。これは、存在しないファイルにたいしてもtをリターンする。

オプション引数groupが非nilの場合、この関数はファイルのグループが変更されないこともチェックする。

filenameがシンボリックリンクの場合は、ここで述べる他の関数と異なり、file-ownership-preserved-pfilenameをターゲットで置き換えない。しかし、この関数は親ディレクトリーのすべての階層において、シンボリックリンクを再帰的にフォローする(follow: 辿る)。

Function: file-modes filename

この関数は、filenameモードビット(mode bits)をリターンする。これは読み取り、書き込み、実行パーミッションを要約する整数である。filenameでのシンボリックリンクは、すべての階層において再帰的にフォローされる。ファイルが存在しない場合のリターン値はnilである。

モードビットの説明は、See File permissions in The GNU Coreutils Manualを参照のこと。たとえば最下位ビットが1なら、そのファイルは実行可能、2ビット目が1なら書き込み可能、...となる。設定できる最大の値は4095(8進の7777)であり、これはすべてのユーザーが読み取り、書き込み、実行のパーミッションをもち、他のユーザーとグループにたいしてSUIDビット、およびstickyビットがセットされる。

これらのパーミッションのセットに使用されるset-file-modes関数については、Changing Filesを参照のこと。

(file-modes "~/junk/diffs")
     ⇒ 492               ; 10進整数
(format "%o" 492)
     ⇒ "754"             ; 8進に変換した値

(set-file-modes "~/junk/diffs" #o666)
     ⇒ nil

$ ls -l diffs
-rw-rw-rw- 1 lewis lewis 3063 Oct 30 16:00 diffs

MS-DOSにたいする注意: MS-DOSでは、“実行可能”を表すようなファイルのモードビットは存在しない。そのため、file-modesはファイル名が.com.bat.exeなどのような標準的な実行可能な拡張子のいずれかで終わる場合は、ファイルを実行可能であると判断する。Unix標準の‘#!’署名で始まるshellスクリプトやPerlスクリプトも、実行可能と判断される。Unixとの互換性のために、ディレクトリーも実行可能と報告される。file-attributes(File Attributesを参照)も、これらの慣習にしたがう。