tail head cat sleep
QR code linking to this page

manページ  — ACCESS

名称

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

内容

ライブラリ

Standard C Library (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 にも該当します。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

ファイルへのアクセスは次の場合に拒絶されます:
[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() システムコールは IEEE Std 1003.1-90 ("POSIX.1") に適合しています。

歴史

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

ACCESS (2) September 21, 2001

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

To err is human...to really foul up requires the root password.