本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 2 : システムコール > c

chown(2)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

chown(), fchown(), lchown() ― ファイルの所有者とグループの変更

構文

#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

int lchown(const char *path, uid_t owner, gid_t group);

int fchown(int fildes, uid_t owner, gid_t group);

説明

chown() システムコールは、ファイルのユーザーとグループの所有権を変更します。 path は、ファイルのパス名を示しています。 chown() は、 ファイルの所有者 ID とグループ ID を、 ownergroup で指定された数値にそれぞれ設定します。 ownergroupUID_NO_CHANGEGID_NO_CHANGE の値が指定されている場合、ファイルの所有者 ID やグループ ID はそれぞれ変更されません。 ownergroup は、 UID_MAX より小さくなくてはいけないことに注意してください limits(5) を参照)。

ファイルの所有者、あるいは、適切な特権を持っている ユーザーと同じ実効ユーザー ID を持つプロセスだけが、ファイルの所有権を変更することができます。 特権グループがサポートされている場合、 ファイルの所有者が、 CHOWN が許されている特権グループのメンバーであり、 setprivgrp コマンド setprivgrp(1M) を参照) により設定されているときに限り、 所有権を変更することができます。 デフォルトでは、ユーザーは全員、 CHOWN 特権を持っています。

ファイルのグループ所有権は、現在のプロセスのアクセスリスト内の グループか、現在のプロセスの実グループか有効グループの ID に変更されます。 特権グループがサポートされていて、ユーザーが CHOWN 特権を持っている場合、ファイルをどのグループにも指定することができます。

スーパーユーザー以外のユーザーが通常のファイルに対して chown() を呼び出した場合、ファイルモードのセットユーザー ID ビットとセットグループ ID ビットはクリアされます。 他のタイプのファイルに対して chown() が呼び出された場合、これらのビットが保存されるかクリアされるかは、 インプリメンテーションに依存しています。

chown() で指定されているパスの最後の構成要素がシンボリックリンクになっているとき、 このリンクはたどられ、パス名変換は続けられます。 chown() は、リンク自体の所有者とグループを変更するのではなく、シンボリックリンクの リンク先の所有者とグループを変更します。

fchown() システムコールは、パス名ではなくファイル記述子で操作対象を指定することを除き、 chown() と同じように機能します。 fildes は、ファイル記述子です。

lchown() システムコールは、指定されたファイルがシンボリックリンクの場合を除き、 chown() と同じように、指定されたファイルの所有者 ID とグループ ID を設定します。この場合、 lchown() はシンボリックリンク ファイル自体の所有者とグループを変更します。

アクセス制御リスト - HFS ファイルシステムのみ

ユーザーは、ファイルのアクセス制御リスト acl(5) を参照) を使うことによって、個々のユーザーやグループごとにアクセスを許可したり、 禁止したりすることができます。 chown() を HFS アクセス制御リスト (ACL) と組み合わせて使う場合、 新しい所有者やグループが、ファイルのアクセス制御リストの中に、 user.%%.group に相当するオプションの ACL エントリーを持っていないと、 ファイルのアクセスパーミッション ビットは変更されません。 しかし、アクセス制御リストの中で user.%%.group というオプションの ACL エントリーで新しい所有者やグループが指定されていると、 chown() は、ファイルのパーミッションビット (とアクセス制御リストの 3 つの基本エントリー) を、 そのエントリーが指定しているパーミッションに設定します。

アクセス制御リスト - JFS ファイルシステムのみ

ユーザーは、ファイルのアクセス制御リスト acl(5) を参照) を使うことによって、 個々のユーザーやグループごとに ファイルへのアクセスを許可したり、禁止したりすることができます。 chown() を JFS アクセス制御リスト (ACL) と組み合わせて使う場合、 ファイルの新しい所有者やグループがファイルのアクセス制御リストの中に user:uid:permgroup:gid:perm に相当するオプションの ACL エントリーを持っていても、そのエントリーには効力がなく、 代わりにファイルの user::permgroup::perm エントリーが使われます。ただし、そのエントリーは ACL 内にそのまま残されます。

戻り値

chown()fchown() は次の値を返します。

 0 

正常終了

-1 

失敗。ファイルの所有者とグループは、変更されないままです。 エラーの種類を示す値が errno にセットされます。

エラー

chown() または lchown() が失敗した場合、次の値の 1 つが errno にセットされます。

[EACCES] 

パスプレフィックスの構成要素に対して、 サーチパーミッションが許されていない場合

[EFAULT] 

path が、そのプロセスに割り当てられたアドレス空間の外を指している場合。 このエラーを検出できるかどうかは、インプリメンテーションに依存しています。

[ELOOP] 

path の解釈中に通過したシンボリックリンクが多すぎる場合

[ENAMETOOLONG] 

_POSIX_NO_TRUNC が有効であるときに、 path の構成要素が NAME_MAX バイトを超えているか、あるいは、 path 全体が PATH_MAX バイトを超えている場合

[ENOENT] 

path で指定されたファイルが存在していない場合

[ENOTDIR] 

パスプレフィックスの構成要素がディレクトリでない場合

[EINVAL] 

ownergroup のどちらかが、 UID_MAX より大きいか、等しいか、または不当な負の値がある場合

[EPERM] 

実効ユーザー ID が適切な特権を持つユーザーではなく、かつ、次の条件のどれかが成り立っている場合

  • 実効ユーザー ID がファイルの所有者と一致していない場合

  • ファイルの所有者を変更するときに、ファイルの所有者が CHOWN 特権が許されている特権グループのメンバーでない場合

  • ファイルのグループを変更するときに、ファイルの所有者が CHOWN 特権が許されている特権グループのメンバーではなく、かつ、グループ番号が現在のプロセスのアクセスリストの中にない場合

[EROFS] 

指定されたファイルが、読み取り専用のファイルシステム上にある場合

fchown() が失敗した場合、次の値の 1 つが errno にセットされます。

[EBADF] 

fildes が有効なファイル記述子でない場合

[EINVAL] 

ownergroup のどちらかが、 UID_MAX より大きいか、等しいか、または不当な負の値がある場合

[EPERM] 

実効ユーザー ID が 適切な特権を持つ ユーザーではなく、かつ、 次の条件のどれかが成り立っている場合

  • 実効ユーザー ID がファイルの所有者と一致していない場合

  • ファイルの所有者を変更するときに、ファイルの所有者が CHOWN 特権が許されている特権グループのメンバーでない場合

  • ファイルのグループを変更するときに、ファイルの所有者が CHOWN 特権が許されている特権グループのメンバーではなく、かつ、 グループ番号が現在のプロセスのアクセスリストの中にない場合

[EROFS] 

指定されたファイルが、読み取り専用のファイルシステム上にある場合

著者

chown() は、 AT&T で開発されました。

fchown() は、カリフォルニア大学バークレイ校で開発されました。

参照

chown(1), setprivgrp(1M), chmod(2), setacl(2), acl(5), aclv(5), limits(5)

標準準拠

chown(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

fchown(): AES, SVID3

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.