CHMOD(2) — NEWS-OS Programmer’s Manual
名称
chmod − ファイルのモードを変更する
形式
#include <sys/types.h>
#include <sys/stat.h>
chmod(path, mode)
char ∗path;
int mode;
fchmod(fd, mode)
int fd, mode;
解説
path で名前が与えられたファイル、 またはディスクリプタ fd で指されたファイルのモードが mode に変更されます。 モードは、 (<sys/stat.h> に定義されている)次のいくつかの 論理和 を とることによって構成されます。
S_ISUID04000実行時におけるセットユーザ ID
S_ISGID02000実行時におけるセットグループ ID
S_ISVTX01000‘sticky ビット’(下記参照)
S_IREAD00400所有者による読み取り
S_IWRITE00200所有者による書き込み
S_IEXEC00100所有者による実行 (ディレクトリの場合はサーチ)
S_IRWXU00700所有者による読み取り、書き込み、および実行 (サーチ)
S_IRUSR00400所有者による読み取り
S_IWUSR00200所有者による書き込み
S_IXUSR00100所有者による実行 (ディレクトリの場合はサーチ)
S_IRWXG00070グループによる読み取り、書き込み、および実行 (サーチ)
S_IRGRP00040グループによる読み取り
S_IWGRP00020グループによる書き込み
S_IXGRP00010グループによる実行 (ディレクトリの場合はサーチ)
S_IRWXO00007その他のユーザによる読み取り、書き込み、および実行
S_IROTH00004その他のユーザによる読み取り
S_IWOTH00002その他のユーザによる書き込み
S_IXOTH00001その他のユーザによる実行 (ディレクトリの場合はサーチ)
ある実行可能なファイルが共有にセットされている場合 (これが デフォルト)、 モード S_ISVTX (sticky ビット) は、 そのファイルの最後のユーザが終了したときに、 ファイルのプログラムテキスト部のスワップスペースイメージを システムが破棄するのを 防止します。 実行可能なファイルに対してこのビットを セットすることができるのは、 スーパーユーザだけです。
モード S_ISVTX (sticky ビット) がディレクトリに対してセットされている場合、 特権が与えられていないユーザは、 そのディレクトリにある他のユーザのファイルを 削除またはリネームすることはできません。 sticky ビットの特性の詳細については、 sticky(8) を参照してください。
ファイルの所有者 (またはスーパーユーザ) だけがモードを 変更することができます。
ユーザがファイルの所有者を 書き込んだり 変更すると、 そのユーザがスーパーユーザではない限り、 セットユーザ ID およびセットグループ ID ビットはオフになります。 これは、 セットユーザ ID (セットグループ ID) ファイルが修正された場合に、 セットユーザ ID (セットグループ ID) ビットが残るのを 防ぐことになり、 ある程度互換性を 犠牲にして、 システムの機密性を 幾分か高めるのに役立っています。
リターン値
正常終了時には、 値 0 が返されます。 そうでない場合には、 −1 が返され、 errno がエラーを 示すようにセットされます。
エラー
以下の場合には、 chmod は失敗し、 ファイルのモードは変更されません。
[ENOTDIR] パスプレフィックスの構成要素がディレクトリではないものがある。
[EINVAL] パス名に最上位ビットのセットされたキャラクタが含まれている。 (NEWS-OS ではこのエラーはありません。)
[ENAMETOOLONG]
パス名の 1 構成要素が 255 バイトを 超えている、 またはパス名全体が 1023 バイトを 超えている。
[ENOENT] 指定されたファイルが存在していない。
[EACCES] パスプレフィックスの構成要素についてサーチパーミッションが 許されていないものがある。
[ELOOP] パス名の処理で遭遇したシンボリックリンクの数が多すぎる。
[EPERM] 有効ユーザ ID がファイルの所有者に一致していなく、 かつ、 その有効ユーザ ID がスーパーユーザのものではない。
[EROFS] 指定されたファイルが読み取り専用のファイルシステム上にある。
[EFAULT] path が、 そのプロセスに割り当てられたアドレススペースの外を 指している。
[EIO] ファイルシステムへの書き込みまたはファイルシステムからの読み取りを 行っている間に入出力エラーが発生した。
以下の場合には、 fchmod は失敗します。
[EBADF] ディスクリプタが有効ではない。
[EINVAL] fd が、 ファイルではなく、 ソケットを 指している。
[EROFS] そのファイルが読み取り専用のファイルシステム上にある。
[EIO] ファイルシステムへの書き込みまたはファイルシステムからの読み取りを 行っている間に入出力エラーが発生した。
関連事項
chmod(1), open(2), chown(2), stat(2), sticky(8), creat(2), fcntl(2), mknod(2), read(2), write(2)
NEWS-OSRelease 4.2.1R