Next: Kinds of Files, Up: Information about Files [Contents][Index]
以下の関数はあるファイルの読み取りや書き込み、実行するためのパーミッションをテストします。明示しない限りこれらの関数はファイル名引数にたいするシンボリックリンクをすべてのレベル(ファイル自身のレベルと親ディレクトリーのレベル)において再帰的にフォロー(follow: 辿る)します。
いくつかのオペレーティングシステムでは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をターゲットで置き換えない。しかしこの関数は親ディレクトリーのすべての階層においてシンボリックリンクを再帰的にフォローする。
この関数は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を参照)も、これらの慣習にしたがう。