名前


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)

openSUSE Logo

コンテンツ