Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ access(2) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chmod(2)

stat(2)

ACCESS(2)  —  NEWS-OS Programmer’s Manual

名称

access − ファイルのアクセス権を判定する

形式

#include <sys/file.h>

#define R_OK4 /∗ test for read permission ∗/
#define W_OK2 /∗ test for write permission ∗/
#define X_OK1 /∗ test for execute (search) permission ∗/
#define F_OK0 /∗ test for presence of file ∗/

accessible = access(path, mode)
int accessible;
char ∗path;
int mode;

解説

access は、 与えられたファイル path のアクセス権について、 mode に従ってチェックを 行います。 mode は、 ビット R_OK、 W_OK、 X_OK の論理和で構成されます。 mode を F_OK (すなわち 0) として指定すると、 ファイルを含むディレクトリがサーチできるかどうか、 かつそのファイルが存在しているかどうかがテストされます。

実ユーザIDと、 (実グループIDの含まれている)グループアクセスリストが、 パーミッションの検証で使用されるので、 このコールは、 set−UIDプログラムにとって有用です。

アクセスビットだけがチェックされることに注意してください。 あるディレクトリが access によって書き込み可能として示されても、 (ファイルを そのディレクトリに作成することはできますが)そのディレクトリを 書き込みのためにオープンしようとしても失敗します。 ファイルが実行可能として示されても、 execve は、 正しいフォーマットでない限り失敗します。

リターン値

path が見つからない場合、 または希望したアクセスモードのいずれかが与えられていない場合には、 値 −1 が返されます。 それ以外の場合には、 値 0 が返されます。

エラー

以下に示されている項目のうち、1つ以上が真である場合には、 ファイルへのアクセスは拒否されます。

[ENOTDIR] パスプレフィックスの構成要素がディレクトリではないものがある。

[EINVAL] パス名に最上位ビットのセットされたキャラクタが含まれている。 (NEWS-OSではこのエラーはありません。)

[ENAMETOOLONG]
パス名の 1構成要素が 255 バイトを 超えている、 またはパス名全体が 1023 バイトを 超えている。

[ENOENT] 指定されたファイルが存在していない。

[EACCES] パスプレフィックスの構成要素についてサーチパーミッションが 許されていないものがある。

[ELOOP] パス名の処理中に遭遇したシンボリックリンクの数が多すぎる。

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

[ETXTBSY] 実行されているプロシージャ(共有テキスト)ファイルに対して 書き込みアクセスが要求された。

[EACCES] ファイルモードのパーミッションビットが、 要求されたアクセスを 許可していない、 またはパスプレフィックスの構成要素についてサーチパーミッションが 許可されていない。 ファイルの所有者は、 “所有者の”読み取り、 書き込み、 および実行モードビットに関してパーミッションを チェックされ、 所有者以外のファイルのグループのメンバは、 “グループの”モードビットに関してパーミッションがチェックされ、 その他のユーザは、 “その他の”モードビットに関してパーミッションがチェックされる。

[EFAULT] path が、 そのプロセスに割り当てられたアドレススペースの外を 指している。

[EIO] ファイルシステムへの書き込みまたはファイルシステムからの読み取りを 行っている間に入出力エラーが発生した。

関連事項

chmod(2), stat(2)

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026