Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
chmod, fchmod - ファイルのモードを変更する
書式
#include <sys/stat.h> int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): fchmod(): _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || /* glibc 2.12 以降: */ _POSIX_C_SOURCE >= 200809L
説明
これらのシステムコールはファイルのアクセス許可 (permission) を変更する。 システムコール間 の違いは、ファイルの指定の仕方だけである。 * chmod() は、 path で指定されたパス名を持つファイルの許可を変更する。 path がシンボリッ クリンクの場合は、リンクの展開が行われる。 * fchmod() は、オープンされたファイルディスクリプタ fd により参照されるファイルの許可を変 更する。 新しいファイル許可は mode で指定される。 mode は、以下に示す値の 0 個以上の OR (論理和) を とって作成される ビットマスクである。 S_ISUID (04000) set-user-ID (execve(2) 時にプロセスの実効ユーザ ID にセットされる) S_ISGID (02000) set-group-ID (以下の場合に (execve(2) 実行時にプロセスの実効グループ ID にセットされる、 強制ロック (mandatory locking) を行う (fcntl(2) の説明 を参照)、 新しいファイルのグループとして親ディレクトリと同じものを使う (chown(2) と (mkdir(2) の説明を参照) S_ISVTX (01000) スティッキービット (sticky bit) (削除制限フラグ、 unlink(2) の説明を参 照) S_IRUSR (00400) 所有者による読み取り S_IWUSR (00200) 所有者による書き込み S_IXUSR (00100) 所有者による実行 (execute) / 検索 (search) (「検索」はディレクトリに対 して適用されるもので、 そのディレクトリ内のエントリーへアクセスできるか を意味する) S_IRGRP (00040) グループによる読み取り S_IWGRP (00020) グループによる書き込み S_IXGRP (00010) グループによる実行 / 検索 S_IROTH (00004) 他人 (others) による読み取り S_IWOTH (00002) 他人による書き込み S_IXOTH (00001) 他人による実行 / 検索 呼び出したプロセスの実効 (effective) UID がファイルの所有者と一致するか、 そのプロセスが特 権を持たなければならない (Linux では CAP_FOWNER ケーパビリティ (capability) を持たなければ ならない)。 呼び出したプロセスに特権がなく (Linux では CAP_FSETID ケーパビリティがなく)、かつファイル のグループ ID が プロセスの実効グループ ID または補助的なグループ ID にマッチしない場合、 S_ISGID ビットはオフにされるが、これによってエラーが返されることはない。 安全のための処置として、 ファイルシステムによっては、ファイルの書き込みを行う時に セット・ ユーザー ID とセット・グループ ID ビットと実行ビットが オフにされることがある。 (Linux で は、書き込みプロセスが CAP_FSETID ケーパビリティを持っていない場合に、これが起こる。) ファイルシステムの中には、スーパーユーザーだけが 特別の意味を持つスティッキービットを設定 できるものがある。 スティッキービットとディレクトリに対する セット・ユーザー (グループ) ID ビットについては、 stat(2) を見よ。 NFS ファイルシステム上では、パーミッションを制限すると、 既にオープンされているファイルに 対してすぐに影響が及ぶ。 これはアクセス制御がサーバー上で行われているが、 オープンされてい るファイルはクライアント側で管理されているためである。 クライアント側でファイル属性の キャッシュが有効になっている場合に、 パーミッションの制限を緩くすると、 他のクライアントに 情報が伝わるのが遅れるかもしれない。
返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
エラー
ファイルシステムによっては他のエラーを返す場合がある。 chmod() で一般的なエラーを以下に挙 げる。 EACCES パス名の構成要素に検索許可がない (path_resolution(7) も見よ)。 EFAULT path がアクセスできるアドレス空間外を指している。 EIO I/O エラーが発生した。 ELOOP path を解決する際に遭遇したシンボリックリンクが多過ぎる。 ENAMETOOLONG path が長過ぎる。 ENOENT ファイルが存在しない。 ENOMEM カーネルに十分なメモリがない。 ENOTDIR パス名の構成要素がディレクトリではない。 EPERM 実効 UID がファイルの所有者と一致せず、プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティを持たない)。 EROFS ファイルが読み込み専用 (read only) のファイルシステム上にある。 fchmod() で一般的なエラーを挙げる: EBADF ファイルディスクリプタ fd が有効でない。 EIO 上記を参照。 EPERM 上記を参照。 EROFS 上記を参照。
準拠
4.4BSD, SVr4, POSIX.1-2001.
関連項目
chown(2), execve(2), fchmodat(2), open(2), stat(2), path_resolution(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。