これらの関数は、ファイルへの読み取り、書き込み、または実行の権限を確認します。特に明記されていない限り、シンボリックリンクを辿ります。ファイル種類の区別を参照してください。
一部のオペレーティングシステムでは、アクセス制御リスト(ACL)などの仕組みを通じて、より複雑なアクセス権限セットを指定できます。これらの権限の照会および設定方法については、拡張ファイル属性を参照してください。
この関数は、filename という名前のファイルが存在するように見える場合に t
を返します。これは、必ずしもそのファイルを読み取れることを意味するわけではなく、単にその属性を確認できる可能性が高いということだけです。(GNU
やその他の POSIX
系システムでは、ファイル自体の権限に関わらず、ファイルが存在し、かつ格納先ディレクトリに対して実行権限があればこのようになります。)
ファイルが存在しない場合、またはファイルの有無の判定に問題が生じた場合、この関数は nil
を返します。
空文字列のファイル名は現在のバッファのデフォルトディレクトリを基準として解釈されるため(絶対ファイル名と相対ファイル名を参照)、空文字列を引数としてfile-exists-pを呼び出すと、バッファのデフォルトディレクトリに関する情報が報告されます。
ディレクトリはファイルであるため、file-exists-p はディレクトリを指定されると
t を返すことがあります。ただし、file-exists-p
はシンボリックリンクを辿るため、リンク先が存在する場合にのみシンボリックリンク名に対して t
を返します。Lispプログラムで、リンク先が存在しない ダングリングシンボリックリンク
を既存のファイルとして扱う必要がある場合は、file-exists-p ではなく file-attributes を使用してください(ファイル属性 を参照)。
この関数は、filename という名前のファイルが存在し、かつ読み取り可能な場合は t を返します。それ以外の場合は nil を返します。
この関数は、filename という名前のファイルが存在し、かつ実行可能な場合は t を返します。それ以外の場合は nil を返します。GNU
やその他の POSIX
系システムでは、ファイルがディレクトリである場合、実行権限とは、ディレクトリ内のファイルの存在や属性を確認でき、かつモードが許可していればそれらのファイルを開くことができることを意味します。
この関数は、ファイル 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
このマクロは、body を実行する前に、default-directory が既存のディレクトリにバインドされていることを保証します。default-directory
が既に存在する場合はそれが適用され、そうでない場合は別のディレクトリが使用されます。このマクロは、例えば、存在するディレクトリ内での実行を必要とする外部コマンドを呼び出す際などに有用です。選択されるディレクトリが書き込み可能であることは保証されません。
filename が読み取れる場合、この関数は nil
を返します。そうでない場合は、string をエラーメッセージのテキストとしてエラーを通知します。
ユーザーオプション remote-file-name-access-timeout
が正の数である場合、その時間(秒)を過ぎても処理が終了しないと、関数はエラーを通知します。これはリモートファイルにのみ適用され、かつパスワードなどの読み取りに別途時間を要さない場合に限られます。
この関数は、ファイル filename を削除して新たに作成してもファイルの所有者が変わらない場合に
t を返します。また、存在しないファイルに対しては t を返します。
オプション引数 group が nil
以外の場合、この関数はファイルのグループが変更されないことも確認します。
この関数はシンボリックリンクを辿りません。
この関数は、filenameのモードビット――読み取り、書き込み、および実行権限をまとめた整数――を返します。この関数はシンボリックリンクを辿ります。ファイルが存在しない場合、戻り値はnilとなります。
モードビットの説明については、The GNU Coreutils Manualのファイル権限を参照してください。例えば、最下位ビットが1の場合、そのファイルはすべてのユーザーが実行可能であり、下から2番目のビットが1の場合、すべてのユーザーが書き込み可能である、といった具合です。取り得る最大値は4095(8進数で7777)であり、これは全員が読み取り、書き込み、および実行権限を持ち、othersとgroupの両方にSUIDビットが設定され、さらにスティッキービットが設定されていることを意味します。
デフォルトでは、この関数はシンボリックリンクを辿ります。ただし、オプション引数 flag がシンボル
nofollow である場合、この関数は filename
がシンボリックリンクであってもそれを辿りません。これにより、意図せず別の場所にあるファイルのモードビットを取得してしまうのを防ぐことができ、また
file-attributes との整合性も高まります(ファイル属性 を参照)。
これらの権限を設定するために使用できる set-file-modes 関数については、ファイル名と属性の変更 を参照してください。
(file-modes "~/junk/diffs" 'nofollow)
⇒ 492 ; Decimal integer.
(format "%o" 492)
⇒ "754" ; Convert to octal.
(set-file-modes "~/junk/diffs" #o666 'nofollow)
⇒ 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などの標準的な実行可能拡張子のいずれかで終わっている場合、そのファイルを実行可能とみなします。シェルスクリプトやPerlスクリプトなど、POSIX標準の‘#!’シグネチャで始まるファイルも実行可能とみなされます。また、POSIXとの互換性のため、ディレクトリも実行可能として報告されます。これらの規約はfile-attributesでも採用されています(ファイル属性を参照)。