CHOWN(2)

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

ライブラリ
libc

書式
<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)

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

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

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

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

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

戻り値

エラー
chown() と lchown() は、次の場合に処理を失敗して、ファイルは変更されません。

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    指定されたファイルが存在しません。

[EACCES]
    指定されたパスには、検索が許可されていないディレクトリが含まれています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EPERM]
    実効ユーザ ID がスーパユーザでありません。

[EROFS]
    指定されたファイルは読取り専用ファイルシステム上にあります。

[EFAULT]
    path は、プロセスに割り当てられたアドレス空間の範囲外を指しています。

[EIO]
    ファイルシステムに読み書きしている間に入出力エラーが発生しました。

Fchown() は次の場合に失敗します。

[EBADF]
    fd が有効な記述子ではありません。

[EINVAL]
    fd がファイルではなくソケットを参照しています。

[EPERM]
    実効ユーザ ID がスーパユーザではありません。

[EROFS]
    指定のファイルは読取り専用ファイルシステムに常駐しています。

[EIO]
    ファイルシステムに読み書きしている間に入出力エラーが発生しました。

関連項目
chgrp(1), chmod(2), flock(2), chown(8)

規格
chown() 関数は p1003.1-90 に準拠しています。

歴史
chown() 関数は AT&T UNIX で登場しました。 fchown() 関数は 4.2BSD で登場しました。

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