EN JA
CHOWN(2)
CHOWN(2) FreeBSD System Calls Manual CHOWN(2)

名称

chown, fchown, lchown, fchownatファイルの所有者とグループを変更する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < unistd.h>

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

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

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

int
fchownat( int fd, const char *path, uid_t owner, gid_t group, int flag);

解説

path で指定された、または fd で参照されたファイルの所有者 ID およびグループ ID を、引数に指定された owner および group に変更します。ファイルの所有者は、 group に自分が所属している任意のグループを指定できます。しかし、 owner を変更することができるのはスーパユーザのみです。

chown() システムコールは、スーパユーザによって実行される場合をのぞいて、ファイル上のユーザ ID 設定ビットとグループ ID 設定ビットをクリアします。これは、ユーザ ID 設定あるいはグループ ID 設定されたプログラムが偶然、またはいたずらで作成されるのを防止するためです。 chown() システムコールは、シンボリックリンクをたどり、リンク自体ではなくリンクのターゲットに作用します。

fchown() システムコールが特に便利なのは、ファイルロッキングプリミティブとともに使用するときです ( flock(2) を参照)。

lchown() システムコールは、 chown() に類似していますが、シンボリックリンクをたどりません。

fchownat() システムコールは、 path が相対パスを指定する場合を除いて、 chown() と lchown() と同等です。この場合、変更されるファイルは、カレントワーキングディレクトリの代わりにファイル記述子 fd に関連しているディレクトリに相対的に決定されます。

flag のための値は、 < fcntl.h> で定義され、次のリストからフラブのビット単位の包括的論理和 (OR) によって構成されます:

AT_SYMLINK_NOFOLLOW
path 名がシンボリックリンクであるなら、シンボリックリンクの所有権が変更されます。

fchownat() が、 fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリが、使用され、振る舞いは、 AT_SYMLINK_NOFOLLOW ビットが flag 引数に設定されているかどうかにより、それぞれ chown() または lchown() への呼び出しと同じです。

所有者 ID またはグループ ID として -1 を指定した場合、その ID は変更されません。

戻り値

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.

エラー

chown() と lchown() は、次の場合に処理を失敗して、ファイルは変更されません:
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
指定されたファイルが存在しません。
[ EACCES]
指定されたパスには、検索が許可されていないディレクトリが含まれています。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ EPERM]
操作は所有権を変更してますが、実効ユーザ ID がスーパユーザでありません。
[ EPERM]
指定されたファイルには、不変、または、追加専用フラグが設定されています、詳細については、 chflags(2) マニュアルページを参照してください。
[ EROFS]
指定されたファイルは読み込み専用ファイルシステム上にあります。
[ EFAULT]
path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。
[ EIO]
ファイルシステムに読み書きしている間に入出力エラーが発生しました。

fchown() システムコールは、次の場合に失敗します:

[ EBADF]
fd 引数が有効な記述子ではありません。
[ EINVAL]
fd 引数がファイルではなくソケットを参照しています。
[ EPERM]
実効ユーザ ID がスーパユーザではありません。
[ EROFS]
指定のファイルは読み込み専用ファイルシステムに常駐しています。
[ EIO]
ファイルシステムに読み書きしている間に入出力エラーが発生しました。

chown() と lchown() に指定されたエラーに加えて fchownat() システムコールは、次の場合に失敗します:

[ EBADF]
path 引数が、絶対パスを指定していません、そして fd 引数は、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません。
[ EINVAL]
flag 引数の値は、有効ではありません。
[ ENOTDIR]
path 引数が、絶対パスではありません、そして fd が、 AT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません。

規格

chown() システムコールは IEEE Std 1003.1-1990 (“POSIX.1”) に適合しています。 fchownat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。

歴史

chown() 関数は Version 7 AT&T UNIX で登場しました。 fchown() システムコールは 4.2BSD で登場しました。

chown() システムコールは 4.4BSD でシンボリックリンクをたどるように変更されました。 lchown() システムコールは、機能の欠落を補充するために FreeBSD 3.0 で追加されました。

fchownat() システムコールは FreeBSD 8.0 で登場しました。

April 10, 2008 FreeBSD