構文
#include <unistd.h>
int access(char *path, int amode);
説明
access() システムコールは、 amode で指定されているビットパターンに従って、 path が指すファイルのアクセス権をチエックします。 access() は、実効ユーザー ID ではなく、実ユーザー ID を使用します。また、実効グループ ID ではなく、実グループ ID を使用します。
amode の値は、 チェックしようとするアクセスパーミッションのビットの論理和、あるいは、
存在しているかどうかのテストになります。 <unistd.h> 内で定義されている、以下に示す記号定数を使用して、
パーミッションのテストを行います。
| R_OK | | 読取りアクセス |
| W_OK | | 書込みアクセス |
| X_OK | | 実行 (サーチ) アクセス |
| F_OK | | ファイルの存在のチェック |
ファイルの所有者は、「所有者」の読取り、書込み、および、実行
モードビットに関してチェックされるパーミッションを持っています。
所有者以外のファイルのグループのメンバーは、「グループ」モードビット
に関してチェックされるパーミッションを持っていて、その他のユーザーは、
「その他の」モードビットに関してチェックされるパーミッションを 持っています。
access() では、実行のためにオープンされているファイルは、そのモードの設定に
関係なく、書き込み不可と報告されます。
アクセス制御リスト
- HFS ファイルシステムのみ
ファイルのアクセス制御リストに対して、読出し、書込み、実行 (サーチ)
パーミッションがチェックされます。 異なるアクセス制御リストエントリーは、それぞれ異なるパーミッションを持っているので、
各モードは別々にチェックされます。 実ユーザー ID だけでなく、プロセスの実グループ
ID と、補助グループリスト内の各グループも、 アクセス制御リストのエントリーと一致するかどうかをチェックされます。
チェックは指定されている順に行われ、特定のレベルで一致しているエントリーが
1 つ以上見つかったときに終了します。 ユーザーの補助グループリストが null でない場合、
1 つ以上の user.group あるいは %.group という形のエントリーがそのユーザーに一致します。
一致するエントリーすべてが適切なパーミッションビットにセットされている場合、
アクセスは許されます。
共有テキストファイルが、実行のためにオープンされている場合、 access() では、アクセス制御リストの値に関係なく、
書き込み不可と報告されます。 ただし、 access() では、チェックが簡単に終わらないため、書込みのために
オープンされている共有テキストファイルが実行不可能であるとは報告されません。
また、読取り専用ファイルシステム上にあるファイルも、書き込み不可と報告されます。
戻り値
access() は次の値を返します。
| 0 | | 正常終了。要求したアクセスが許可されます。 パスが有効で、実ユーザー ID が スーパーユーザーである場合、 access() は常に 0 を返します。
ただし、 amode に X_OK が入っている場合、 パスがディレクトリではない場合、および実行ビットのいずれもファイルのモードにセットされていない場合を除きます。 |
| -1 | | 異常終了。 errno には、エラーを示す値がセットされます。 |
エラー
access() が異常終了すると、 errno には、次の値の 1 つがセットされます。
| [EACCES] | | パスプリフィックスの構成要素に対して、サーチパーミッションが 許可されていない場合。 |
| [EACCES] | | アクセス制御リストが要求されているアクセスを許可せず、かつ、
実ユーザー ID が 適切な特権 を持っているユーザーでない場合。 |
| [EFAULT] | | path が、そのプロセスに割り当てられたアドレス空間の外を指している場合。
このエラーを検出できるかどうかは、インプリメンテーションに依存しています。 |
| [ELOOP] | | パス名の変換で、通過するシンボリックリンクの数が多すぎる場合。 |
| [ENAMETOOLONG] | | 指定されたパス名全体の長さが PATH_MAX バイトを超えているか、あるいは、 _POSIX_NO_TRUNC が有効であるときに、パス名の構成要素の長さが NAME_MAX バイトを超えている場合。 |
| [ENOENT] | | null パス名に対して、読取り、書込み、実行 (サーチ) パーミッションが
要求されている場合。 |
| [ENOENT] | | 指定されたファイルが存在していない場合。 |
| [ENOTDIR] | | パスプリフィックスの構成要素がディレクトリでない場合。 |
| [EROFS] | | 読取り専用のファイルシステム上にあるファイルに対して、書込みアクセスが
要求されている場合。 |
| [ETXTBSY] | | 実行されているピュアプロシジャ (共有テキスト) ファイルに対して、
書込みアクセスが要求されている場合。 |
参照
acl(2), chmod(2), stat(2), setacl(2),acl(5),aclv(5),
unistd(5)
標準準拠
access(): AES, SVID2, SVID3, XPG2, XPG3,
XPG4, FIPS 151-2, POSIX.1