chmod

Autres langues

Langue: ja

Version: 2004-06-23 (mandriva - 01/05/08)

Autres sections - même nom

Section: 2 (Appels système)

名前

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
00400 所有者 (owner) による読み取り (read)
S_IWUSR
00200 所有者による書き込み (write)
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
ファイル・ディスクリプター fildes が有効でない。
EIO
上記を参照。
EPERM
上記を参照。
EROFS
上記を参照。

準拠

4.4BSD, SVr4, POSIX.1-2001.

関連項目

chown(2), execve(2), fchmodat(2), open(2), stat(2), path_resolution(7)