Next: Kinds of Files, Up: Information about Files [Contents][Index]
以下の関数は、あるファイルを読み取り、書き込み、実行するためのパーミッションをテストします。明示しない限り、これらの関数はファイル名引数にたいするシンボリックリンクを、すべてのレベル(ファイル自身のレベルおよび親ディレクトリーのレベル)において再帰的にフォローします。
いくつかのオペレーティングシステムでは、ACL(Access Control Lists: アクセス制御リスト)のような機構を通じて、より複雑なアクセスパーミッションセットが指定できます。それらのパーミッションにたいする問い合わせやセットの方法については、Extended Attributesを参照してください。
この関数は、ファイル名filenameが存在しているようならt
をリターンする。これは、そのファイルが読み取り可能である必要はなく、ファイルの属性を調べることが可能なこと意味する(UnixおよびGNU/Linuではなく、そのファイルが存在し、かつそのファイルを含むディレクトリーの実行パーミッションをもつ場合にt
となり、そのファイル自体のパーミッションは無関係である)。
ファイルが存在しない、またはACLポリシーがファイル属性を調べることを禁止する場合、この関数はnil
をリターンする。
ディレクトリーはファイルなので、ディレクトリー名が与えられた場合、file-exists-p
はt
をリターンする。しかし、シンボリックリンクは特別に扱われる。file-exists-p
はターゲットファイルが存在する場合のみ、シンボリックリンクにたいしてt
をリターンする。
この関数は、filenameという名前のファイルが存在し、それを読み取ることが可能な場合はt
をリターンする。それ以外はnil
をリターンする。
この関数は、filenameという名前のファイルが存在し、それを実行することが可能な場合はt
をリターンする。それ以外はnil
をリターンする。UnixおよびGNU/Linuxシステムでは、そのファイルがディレクトリーの場合、実行パーミッションはディレクトリー内のファイルの存在と属性をチェックでき、ファイルのモードが許せばオープンできることを意味する。
この関数は、filenameという名前のファイルに書き込み可能、または作成可能可能な場合はt
をリターンする。それ以外はnil
をリターンする。ファイルが存在し、それに書き込むことができるなら、ファイルは書き込み可能である。ファイルが存在せず、指定されたディレクトリーが存在して、そのディレクトリーに書き込むことができるなら、書き込み可能である。
以下の例では、fooは親ディレクトリーが存在しないので、たとえユーザーがそのディレクトリーを作成可能であっても、ファイルは書き込み可能ではない。
(file-writable-p "~/no-such-dir/foo") ⇒ nil
この関数は、ファイルとしての名前がdirnameであるようなディレクトリー内にある既存のファイルをオープンするパーミッションをもつ場合は、t
をリターンする。それ以外(またはそのようなディレクトリーが存在しない場合)はnil
をリターンする。dirnameの値はディレクトリー名(/foo/など)、または名前がディレクトリー(最後のスラッシュがない/fooなど)であるようなファイルである。
たとえば、以下では/foo/内の任意のファイルを読み取る試みは、エラーになると推測される:
(file-accessible-directory-p "/foo") ⇒ nil
この関数は、読み取り用にファイルfilenameをオープンして、クローズした後にnil
をリターンする。しかし、オープンに失敗した場合は、stringをエラーメッセージのテキストに使用して、エラーをシグナルする。
この関数は、ファイルfilenameを削除して、それを新たに作成しても、そのファイルの所有者が変更されずに維持される場合は、t
をリターンする。これは、存在しないファイルにたいしてもt
をリターンする。
オプション引数groupが非nil
の場合、この関数はファイルのグループが変更されないこともチェックする。
filenameがシンボリックリンクの場合は、ここで述べる他の関数と異なり、file-ownership-preserved-p
はfilenameをターゲットで置き換えない。しかし、この関数は親ディレクトリーのすべての階層において、シンボリックリンクを再帰的にフォローする(follow:
辿る)。
この関数は、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を参照)も、これらの慣習にしたがう。