CHFLAGS(2)

名称
chflags, lchflags, fchflags - ファイルフラグを設定する

ライブラリ
libc

書式
<sys/stat.h> <unistd.h> int chflags(const char *path, u_long flags) int lchflags(const char *path, int flags) int fchflags(int fd, u_long flags)

解説
名前が path によって指定されるファイル、または記述子 fd によって参照されるファイルのフラグが flags に変更されます。

lchflags() システムコールは chflags() と同じですが、指定されたファイルがシンボリックリンクだった場合の 動作が異なります。 この場合 lchflags() は、リンクが指している先のファイルではなく、リンク自身のフラグを変更します。

指定されたフラグは次の値の論理和 (or) を取ることで作成されます。

UF_NODUMP
    そのファイルを dump の対象外とします。
UF_IMMUTABLE
    そのファイルは変更禁止です。
UF_APPEND
    そのファイルは末尾への追加だけが可能です。
UF_NOUNLINK
    そのファイルは名前を変更したり削除できません。
UF_OPAQUE
    ユニオンファイルシステムのスタックを通じて見るとき、 このディレクトリは不透明です。
SF_ARCHIVED
    そのファイルはアーカイブ可能です。
SF_IMMUTABLE
    そのファイルは変更禁止です。
SF_APPEND
    そのファイルは末尾への追加だけが可能です。
SF_NOUNLINK
    そのファイルは名前を変更したり削除できません。

“UF_IMMUTABLE”, “UF_APPEND”, “UF_NOUNLINK”, “UF_NODUMP”, “UF_OPAQUE” フラグは、ファイルの所有者またはスーパユーザのどちらかによって 設定または設定解除できます。 “SF_IMMUTABLE”, “SF_APPEND”, “SF_NOUNLINK”, “SF_ARCHIVED” フラグは、スーパユーザだけが設定または設定解除できます。 スーパユーザのみが設定できるフラグを スーパユーザでないものが設定しようとしても 警告なしで無視されます。 これらのフラグはいつでも設定できますが、 通常は、システムがシングルユーザモードにあるときにだけ 設定解除するのが普通です (詳細については init(8) を参照してください)。

戻り値

エラー
chflags() システムコールの処理は以下の場合に失敗します:

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    指定されたファイルが存在しません。

[EACCES]
    指定されたパスには、検索が許可されていないディレクトリが含まれています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EPERM]
    実効ユーザ ID がファイルの所有者と一致せず、かつ、実効ユーザ ID が スーパユーザでありません。

[EROFS]
    指定されたファイルは読取り専用ファイルシステム上にあります。

[EFAULT]
    path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

[EIO]
    ファイルシステムに読み書きしている間に入出力エラーが発生しました。

[EOPNOTSUPP]
    ファイルシステムがファイルフラグをサポートしません。

fchflags() システムコールの処理は以下の場合に失敗します:

[EBADF]
    記述子が有効ではありません。

[EINVAL]
    fd 引数がファイルではなくソケットを参照しています。

[EPERM]
    実効ユーザ ID がファイルの所有者と一致せず、 実効ユーザ ID がスーパユーザではありません。

[EROFS]
    ファイルが読取り専用システム上に存在しています。

[EIO]
    ファイルシステムに読み書きしている間に入出力エラーが発生しました。

[EOPNOTSUPP]
    ファイルシステムがファイルフラグをサポートしません。

関連項目
chflags(1), fflagstostr(3), strtofflags(3), init(8), mount_unionfs(8)

歴史
chflags() システムコールと fchflags() システムコールは 4.4BSD ではじめて登場しました。