スポンサーリンク

ACCESS(2) FreeBSD システムコールマニュアル ACCESS(2)

名称

access, eaccess − ファイルのアクセス可能性をチェックする

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <unistd.h>

int

access(const char *path, int mode);

int

eaccess(const char *path, int mode);

解説

access() システムコールと eaccess() システムコールは、 mode 引数によって 示されたアクセス許可について path 引数で指定されるファイルのアクセス可能 性をチェックします。 mode の値は、チェックされるアクセス許可 (読取り許可 については R_OK 、書込み許可については W_OK 、実行 / 検索許可については X_OK) のビット単位の OR、または存在試験 ( F_OK ) のどちらかです。

さらなる情報は、 intro(2) の ファイルアクセスパーミッションセクションを参 照してください。

eaccess() システムコールは、実効ユーザ ID とグループアクセスリストを用い て要求を許可します。一方 access() システムコールは、実効ユーザ ID の代わ りに実ユーザ ID を、実効グループ ID の代わりに実グループと残りのグループ アクセスリストを用います。

プロセスの実ユーザもしくは実効ユーザに適切な特権があり、 X_OK について成 功を示していても、実際にはファイルの実行許可ビットが設定されていないこと があります。同じことが、 R_OK および W_OK にも該当します。

戻り値

成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。

エラー

ファイルへのアクセスは次の場合に拒絶されます:

       [ENOTDIR]

パスの構成要素中にディレクトリ以外のものが含まれていま す。

[ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス 名全体が 1023 文字を越えています。

[ENOENT]
指定されたファイルが存在しません。

[ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多 すぎます。

[EROFS]
読取り専用ファイルシステム上のファイルについて書込みア クセスが要求されました。

[ETXTBSY]
現時点で実行中の純粋な手続き (共有テキスト) ファイルに ついて書込みアクセスが要求されています。

[EACCES]
ファイルモードの許可ビットが要求されたアクセスを許容し ないか、またはパスの構成要素について検索許可が拒絶され ています。

[EFAULT]
path
引数が、プロセスに割り当てられたアドレス空間の範 囲外を指しています。

[EIO]
ファイルシステムに読み書きしている間に入出力エラーが発 生しました。

セキュリティに関する考察

access() システムコールは、競合状態によって潜在的なセキュリティホールとな るので、使うべきではありません。ユーザ ID 設定とグループ ID 設定されたア プリケーションは、実効ユーザ ID もしくは実効グループ ID を復元するように してください。そして実ユーザ ID もしくは実グループ ID でのアクセスを、 access() を使用して模擬的にチェックするのではなく、直接実行するべきです。 不適切に使用された場合、 eaccess() 呼び出しも同様にして競合の対象となるこ とがあります。

関連項目

chmod(2), intro(2), stat(2)

規格

access() システムコールは ISO/IEC 9945-1:1990 (‘‘POSIX.1’’) に適合してい ます。

歴史

access() 関数は Version 7 AT&T UNIX で登場しました。

FreeBSD 10.0 September 21, 2001 FreeBSD 10.0

スポンサーリンク