名称
getacl, fgetacl ― アクセス制御リスト (ACL) 情報を得る (HFS ファイルシステムのみ)
構文
#include <sys/acl.h>
int getacl(
const char *path,
int nentries,
struct acl_entry *acl
);
int fgetacl(int fildes, int nentries, struct acl_entry *acl);
説明
getacl() は、存在するファイルのアクセス制御リスト中すべての
ACL エントリー uid.gid, mode) の完全なリストを返します。 path はファイルのパス名を指します。
同様に、 fgetacl() は、ファイル記述子 fildes が指定する開いているファイルのすべての ACL エントリーの完全なリストを返します。
nentries は報告されるエントリーの数であり、絶対に <sys/acl.h>
で定義される定数 NACLENTRIES より多くてはなりません。 nentries が 0 でない場合、ベースエントリーを含めて少なくともファイルの
ACL 中のエントリーの数と同じでなければなりません setacl(2) を参照)。 getacl() はファイルの
ACL 中のエントリーの数と、呼び出したプログラムによって宣言された構造体 acl の配列中の ACL エントリー自身の数を返します。
nentries が 0 の場合、 getacl() はベース
ACL エントリーを含んだファイルの ACL エントリーの数を返し、 acl は無視します。
エントリーは、詳細度 setacl(2) を参照)
の減少順でグループ分けをして、各グループ内ではユーザー ID とグループ
ID でソートされて報告されます。 ファイルの定義されたエントリー数以上の配列エントリーの内容は定義されません。
戻り値
getacl() および fgetacl() は、正常終了すると負でない値を返します。
失敗すると-1 を返し、エラーを示す値が errno にセットされます。
エラー
getacl() は、次の条件のいずれかを満たす場合に、 acl 配列の修正に失敗します。
| [ENOTDIR] | | path の構成要素 プリフィックスがディレクトリでない場合 |
| [ENOENT] | | 名前のついたファイルが存在しない (たとえば、 path が null か path の構成要素が存在しない) 場合 |
| [EACCES] | | path プリフィックスの構成要素が探索パーミッションを拒否する場合 |
| [EFAULT] | | 書き込まれる path あるいは acl の一部が割り当てられたアドレス空間のプロセス外を指している場合 |
| [EINVAL] | | nentries が 0 でなく、ファイルの ACL 中のエントリーの数より少ないか、あるいは NACLENTRIES より多い場合 |
| [EOPNOTSUPP] | | getacl() が、リモートファイル上であるネットワークサービスによってサポートされて
いない場合 |
| [ENOSYS] | | 関数がこのファイルシステム タイプでサポートされない場合 |
| [ENFILE] | | システム ファイルテーブルが一杯である場合 |
| [ENAMETOOLONG] | | _POSIX_NO_TRUNC が有効なときに、 path の長さが PATH_MAX バイトを越えるか、 path の構成要素の長さが NAME_MAX バイトを越える場合 |
| [ELOOP] | | path 名を変換する際、シンボリックリンクの数が多過ぎた場合 |
fgetacl() は、次の条件のいずれかを満たす場合に acl 配列の修正に失敗します。
| [EBADF] | | fildes が正しいファイル記述子でない場合 |
| [EINVAL] | | nentries が 0 でなく、ファイルの ACL 中のエントリーの数より少ないか、 NACLENTRIES より多い場合 |
| [ENOSYS] | | 関数がこのファイルシステム タイプでサポートされない場合 |
| [ENFILE] | | システム ファイルテーブルが一杯である場合 |
例
以下の呼び出しでは、ファイル /users/bill/mcfile 上の
ACL 中のエントリーの数を返します。
#include <sys/acl.h>
entries = getacl ("/users/bill/mcfile", 0, (struct acl_entry *) 0);
以下の呼び出しでは、ファイル記述子 5 でオープンされているファイル上の
ACL 中のすべての acl エントリーを返します。
#include <sys/acl.h>
int nentries;
struct acl_entry acl [NACLENTRIES];
entries = fgetacl (5, NACLENTRIES, acl);
制約
getacl() と fgetacl() は標準
HP-UX オペレーティングシステムの HFS ファイルシステムでのみサポートされています。
著者
getacl() と fgetacl() は
HP で開発されました。
参照
access(2), chmod(2), getaccess(2), setacl(2), stat(2), unistd(5)