CHMOD(2)

名前
chmod, fchmod - ファイルのモードを変更する

書式
#include <sys/types.h>
#include <sys/stat.h>

int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);

説明
path で与えられたファイル、 または fildes で参照されるファイルのモードを変更する。 モードは、次の各モードの or をとったもので指定する:

    S_ISUID
        04000 実行時のセット・ユーザー・ID(set user ID)

    S_ISGID
        02000 実行時のセット・グループ・ID(set group ID)

    S_ISVTX
        01000 スティッキー(sticky)ビット

    S_IRUSR (S_IREAD)
        00400 所有者(owner)による読み取り(read)

    S_IWUSR (S_IWRITE)
        00200 所有者による書き込み(write)

    S_IXUSR (S_IEXEC)
        00100 所有者による実行(execute)/検索(search)

    S_IRGRP
        00040 グループによる読み取り

    S_IWGRP
        00020 グループによる書き込み

    S_IXGRP
        00010 グループによる実行/検索

    S_IROTH
        00004 他人(others)による読み取り

    S_IWOTH
        00002 他人による書き込み

    S_IXOTH
        00001 他人による実行/検索

プロセスの実効(effective)UIDがゼロであるか、 ファイルの所有者と一致しなければならない。 もしプロセスの実効 UID がゼロでなく、ファイルのグループ IDが プロセスの実効グループID または補助的なグループ IDにマッチし ない場合、S_ISGID ビットはオフにされるが、これによってエラーが 返されることはない。 ファイル・システムによっては、ファイルの書き込みを行う時に セット・ユーザーIDとセットグループIDビットと実行ビットが オフにされることがある。ファイル・システムの中には、 スーパー・ユーザーだけがスティッキー・ビットを設定できる。 それは特別な意味をもつ。(ディレクトリの場合、所有者かスーパー・ユーザー だけがファイルを削除できる)

返り値
成功すると、0 を返す。失敗すると、-1を返し、 errno に適切な値を設定する。

エラー
ファイルシ・ステムによっては他のエラーが返す場合がある。 chmod で一般的なエラーを以下に挙げる

EPERM
    実効UIDがファイルの所有者と一致せず、スーパー・ユーザーでもない。

EROFS
    ファイルが読み込み専用(read only)のファイル・システム上にある。

EFAULT
    path が割り当てられたアドレス空間外を指している。

ENAMETOOLONG
    path が長過ぎる。

ENOENT
    ファイルが存在しない。

ENOMEM
    カーネルに十分なメモリがない。

ENOTDIR
    path の構成要素がディレクトリではない。

EACCES
    パス名の構成要素に検索許可がない。

ELOOP
    path を解決する際に遭遇したシンボリック・リンクが多過ぎる。

EIO I/O エラーが発生した。 fchmod で一般的なのエラーを挙げる:

EBADF
    ファイル・ディスクリプター fildes が有効でない。

EROFS
    上記を参照。

EPERM
    上記を参照。

EIO 上記を参照。

準拠
chmod は SVr4, SVID, POSIX, X/OPEN, 4.4BSD と互換性がある。 SVr4 は EINTR, ENOLINK, EMULTIHOP は返すが ENOMEM は返さない。 POSIX.1 には EFAULT, ENOMEM, ELOOP, EIO エラーや S_IREAD, S_IWRITE,S_IEXEC マクロ についての記述はない。

fchmod は 4.4BSD, SVr4 と互換性がある。 SVr4 には他に EINTR, ENOLINK エラー状態の記述はない。 POSIX では fchmod 関数は少なくとも _POSIX_MAPPED_FILES と _POSIX_SHARED_MEMORY_OBJECTS のどちらかが定義されいる必要がある。そして ENOSYS と EINVAL エラー 状態についての記述があり、EIO についての記述はない。

POSIX と X/OPEN にはスティッキー・ビットについての記述はない。

関連項目
open(2), chown(2), stat(2)