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


24.6.1 アクセシビリティのテスト

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

いくつかのオペレーティングシステムでは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-pはここで述べる他の関数と異なりfilenameをターゲットで置き換えない。しかしこの関数は親ディレクトリーのすべての階層においてシンボリックリンクを再帰的にフォローする。

Function: file-modes filename

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

モードビットの説明は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を参照)も、これらの慣習にしたがう。