other versions
other sections
| CHOWN(2) | Linux Programmer's Manual | CHOWN(2) | 
名前¶
chown, fchown, lchown - ファイルの所有者を変更する書式¶
#include <unistd.h>glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_BSD_SOURCE ||
  _XOPEN_SOURCE >= 500 ||
  _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
 
|| /* glibc 2.12 以降: */
  _POSIX_C_SOURCE >= 200809L
説明¶
これらのシステムコールは、ファイルの所有者 (owner) とグループを変更する。 システムコール間の違いは、ファイルの指定の仕方だけである。- *
 - chown() は path で指定されたファイルの所有権を変更する。 path がシンボリック・リンクの場合は、リンクの展開が行われる。
 
- *
 - fchown() はオープンされたファイルディスクリプタ fd により参照されるファイルの所有権を変更する。
 
- *
 - lchown() は chown() と同じだが、シンボリック・リンクを展開しない点が異なる。
 
返り値¶
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー¶
ファイルシステムによっては他のエラーが返される事がある。 chmod で一般的なエラーを以下に挙げる。- EACCES
 - パス名の構成要素に検索許可がない ( path_resolution(7) も見よ)。
 
- EFAULT
 - path がアクセスできるアドレス空間外を指している。
 
- ELOOP
 - path を解決する際に遭遇したシンボリック・リンクが多過ぎる。
 
- ENAMETOOLONG
 - path が長過ぎる。
 
- ENOENT
 - ファイルが存在しない。
 
- ENOMEM
 - カーネルに十分なメモリがない。
 
- ENOTDIR
 - パス名の構成要素がディレクトリではない。
 
- EPERM
 - 呼び出したプロセスに所有者またはグループ (もしくはその両方) を変更するために 要求される許可 (上記を参照) がない。
 
- EROFS
 - ファイルが読み込み専用 (read only) のファイル・システム上にある。
 
- EBADF
 - ディスクリプターが有効でない。
 
- EIO
 - i ノード (inode) を変更する際に低レベル I/O エラーが発生した。
 
- ENOENT
 - 上記を参照。
 
- EPERM
 - 上記を参照。
 
- EROFS
 - 上記を参照。
 
準拠¶
4.4BSD, SVr4, POSIX.1-2001.注意¶
元々の Linux の chown(), fchown(), lchown() システムコールは、 16 ビットのユーザ ID とグループ ID だけに対応していた。 その後、 32 ビットの ID に対応した chown32(), fchown32(), lchown32() が Linux 2.4 で追加された。 chown(), fchown(), and lchown() の glibc のラッパー関数は、 カーネルのバージョンによる違いを吸収している。- *
 - ファイルシステムが -o grpid 付きでマウントされている場合、新しいファイルのグループは 親ディレクトリのグループと同じになる。
 
- *
 - ファイルシステムが -o nogrpid 付きでマウントされており、親ディレクトリでは set-group-ID ビットが 無効になっている場合、新しいファイルのグループは プロセスのファイルシステム GID と同じになる。
 
- *
 - ファイルシステムが -o nogrpid 付きでマウントされており、親ディレクトリでは set-group-ID ビットが 有効になっている場合、新しいファイルのグループは 親ディレクトリのグループと同じになる。
 
例¶
以下のプログラムは、 二つ目のコマンドライン引き数で指定された名前のファイルの所有者を、 一つ目のコマンドライン引き数で指定された値に変更する。 新しい所有者は、数字のユーザ ID かユーザ名のいずれかで指定できる (ユーザ名で指定した場合には、 getpwnam(3) を使ってシステムのパスワードファイルの検索が行われ、 ユーザ ID への変換が行われる)。
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
    uid_t uid;
    struct passwd *pwd;
    char *endptr;
    if (argc != 3 || argv[1][0] == '\0') {
        fprintf(stderr, "%s <owner> <file>\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    uid = strtol(argv[1], &endptr, 10);  /* Allow a numeric string */
    if (*endptr != '\0') {         /* Was not pure numeric string */
        pwd = getpwnam(argv[1]);   /* Try getting UID for username */
        if (pwd == NULL) {
            perror("getpwnam");
            exit(EXIT_FAILURE);
        }
        uid = pwd->pw_uid;
    }
    if (chown(argv[2], uid, -1) == -1) {
        perror("chown");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}
関連項目¶
chmod(2), fchownat(2), flock(2), path_resolution(7), symlink(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。| 2010-11-22 | Linux |