EN JA
CHFLAGS(2)
CHFLAGS(2) FreeBSD System Calls Manual CHFLAGS(2)

名称

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

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/stat.h>
#include < unistd.h>

int
chflags( const char *path, unsigned long flags);

int
lchflags( const char *path, unsigned long flags);

int
fchflags( int fd, unsigned long flags);

int
chflagsat( int fd, const char *path, unsigned long flags, int atflag);

解説

名前が path によって与えられるか、または記述子 fd によって参照されるファイルは、そのフラグを flags に変更します。

lchflags() システムコールは、指定されたファイルがシンボリックリンクである場合を除いて、 chflags() に似ています、シンボリックリンクである場合には、 lchflags() は、それが指すファイルではなく、リンク自体のフラグを変更します。

chflagsat() は、 path が相対パスを指定する場合を除いて、 atflag に依存する、 chflags() または lchflags() のいずれかと同等です。この場合に、変更されるファイルは、現在の作業ディレクトリの代わりに、ファイル記述子 fd に関連したディレクトリに相対的であると判断されます。 atflag のための値は、 < fcntl.h> に定義され、次のリストからフラグのビット単位の包括的な論理和 (OR) によって構築されます:

AT_SYMLINK_NOFOLLOW
path がシンボリックリンクを指定するなら、シンボリックリンクのフラグは、変更されます。

chflagsat() に fd パラメータの特別な値 AT_FDCWD を渡すなら、現在の作業ディレクトリが使用されます。また atflag が 0 であるなら、振る舞いは、 chflags() への呼び出しと同一です。

指定されたフラグは、次の値の論理和 ( OR) することによって形成されます。

SF_APPEND
ファイルは、追加のみです。
SF_ARCHIVED
ファイルは、アーカイブされません。このフラグは、DOS、Windows と CIFS FILE_ATTRIBUTE_ARCHIVE 属性の反対を意味します。このフラグは、推奨されず、将来のリリースで削除されるかもしれません。
SF_IMMUTABLE
ファイルは、変更されません。
SF_NOUNLINK
ファイルは、名前を変更されず削除されません。
SF_SNAPSHOT
ファイルは、スナップショットファイルです。
UF_APPEND
ファイルは、追加のみです。
UF_ARCHIVE
ファイルは、アーカイブされる必要があります。このフラグは、DOS、Windows と CIFS FILE_ATTRIBUTE_ARCHIVE 属性と同じ意味があります。 FreeBSD のファイルシステムは、このフラグのための特別の扱いがあるかもしれないし、ないかもしれません。例えば、ZFS は、ファイルへの変更を追跡し、ファイルが更新されるとき、このビットを設定します。 UFS は、単にフラグを格納し、必要だったとき、それを変更するアプリケーションに依存します。
UF_HIDDEN
ファイルは、アプリケーションの裁量でディレクトリのリストから隠されるかもしれません。ファイルには、DOS、Windows と CIFS FILE_ATTRIBUTE_HIDDEN 属性があります。
UF_IMMUTABLE
ファイルは、変更されません。
UF_NODUMP
ファイルをダンプしません。
UF_NOUNLINK
ファイルは、名前を変更されず削除されません。
UF_OFFLINE
ファイルは、オフラインであるか、または Windows と CIFS FILE_ATTRIBUTE_OFFLINE 属性があります。 FreeBSD のファイルシステムは、このフラグを格納し、表示しますが、それが設定されるとき、特別の扱いを提供しません。
UF_OPAQUE
ディレクトリは、union スタックを通して見るとき、不透明です。
UF_READONLY
ファイルは、読み出し専用で、書き込まれないか、または追加されないかもしれません。ファイルシステムは、DOS、Windows と CIFS FILE_ATTRIBUTE_READONLY 属性との互換性を維持するために、このフラグを使用します。
UF_REPARSE
ファイルは、Windows 再解析ポイントを含んでおり、Windows と CIFS FILE_ATTRIBUTE_REPARSE_POINT 属性があります。
UF_SPARSE
ファイルには、Windows FILE_ATTRIBUTE_SPARSE_FILE 属性があります。また、これは、スパース (sparse) ファイルを示すためにファイルシステムによって使用されます。
UF_SYSTEM
ファイルには、DOS、Windows と CIFS FILE_ATTRIBUTE_SYSTEM 属性があります。 FreeBSD のファイルシステムは、このフラグを格納し、表示しますが、それが設定されるとき、特別の扱いを提供しません。

SF_IMMUTABLE, SF_APPEND または SF_NOUNLINK の 1 つが設定されているなら、スーパユーザでないものは、どんなフラグも変更することができません、そして、スーパユーザさえセキュリティレベル (securelevel) が 0 である場合に限りフラグを変更ことができます。 (詳細については、 init(8) を参照してください。)

UF_IMMUTABLE, UF_APPEND, UF_NOUNLINK, UF_NODUMPUF_OPAQUE フラグは、ファイルの所有者またはスーパユーザのいずれかよって設定または未設定とされます。

SF_IMMUTABLE, SF_APPEND, SF_NOUNLINKSF_ARCHIVED フラグは、スーパユーザによってのみ設定または未設定とされます。スーパユーザでないものによって、これらのフラグを切り替える試みは、拒絶されます。これらのフラグは、いつでも設定されますが、通常、システムがシングルユーザモードになるときのみ未設定とされます (詳細については、 init(8) を参照)。

すべてのフラグの実装は、ファイルシステム依存です。異なった振る舞いの 1 つの例については、上記の UF_ARCHIVE フラグの記述を参照してください。サポート、または様々なファイルシステムの、これらのフラグのサポートの不足を説明するためのアプリケーションを書くとき、注意が払われるべきです。

SF_SNAPSHOT フラグは、システムによって管理され、切り替えることはできません。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

chflags() システムコールは、次の場合に失敗します:
[ ENOTDIR]
パス接頭辞の構成要素がディレクトリではありません。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、または全体のパス名が 1023 文字を越えています。
[ ENOENT]
指定されたファイルが存在しません。
[ EACCES]
検索パーミッションが、パス接頭辞の構成要素のために拒否されます。
[ ELOOP]
パス名を変換するときにあまりに多くのシンボリックリンクに遭遇しました。
[ EPERM]
実効ユーザ ID がファイルの所有者と一致せず、実効ユーザ ID がスーパユーザではありません。
[ EPERM]
SF_IMMUTABLE, SF_APPEND または SF_NOUNLINK の 1 つが設定され、ユーザがスーパユーザでないか、セキュリティレベルが 0 より大きいかのいずれかです。
[ EPERM]
スーパユーザでないものが、 SF_ARCHIVED, SF_IMMUTABLE, SF_APPEND または SF_NOUNLINK の 1 つを切り替えようと試みました。
[ EPERM]
SF_SNAPSHOT フラグを切り替える試みが行われました。
[ EROFS]
指定されたファイルが読み込み専用のファイルシステムに存在します。
[ EFAULT]
path 引数が、プロセスの割り付けられたアドレス空間の外側を指しています。
[ EIO]
ファイルシステムから読み込んでいる間、または書き込んでいる間に I/O エラーが起こりました。
[ EOPNOTSUPP]
基本的なファイルシステムがファイルフラグをサポートしないか、または flags に設定されたすべてのフラグをサポートしませんでした。

fchflags() システムコールは、次の場合に失敗します:

[ EBADF]
記述子が有効ではありません。
[ EINVAL]
fd 引数がファイルではなくソケットを参照しています。
[ EPERM]
実効ユーザ ID がファイルの所有者と一致せず、実効ユーザ ID がスーパユーザではありません。
[ EPERM]
SF_IMMUTABLE, SF_APPEND または SF_NOUNLINK の 1 つが設定され、ユーザがスーパユーザでないか、セキュリティレベルが 0 より大きいかのいずれかです。
[ EPERM]
スーパユーザでないものが、 SF_ARCHIVED, SF_IMMUTABLE, SF_APPEND または SF_NOUNLINK の 1 つを設定しようとしました。
[ EPERM]
SF_SNAPSHOT フラグを切り替えようと試みました。
[ EROFS]
ファイルが読み込み専用のファイルシステムに存在します。
[ EIO]
ファイルシステムから読み込んでいる間、または書き込んでいる間に I/O エラーが起こりました。
[ EOPNOTSUPP]
基本的なファイルシステムがファイルフラグをサポートしないか、または flags に設定されたすべてのフラグをサポートしませんでした。

歴史

chflags() と fchflags() システムコールは、 4.4BSD ではじめて登場しました。 lchflags() システムコールは、 FreeBSD 5.0 ではじめて登場しました。 chflagsat() システムコールは、 FreeBSD 10.0 ではじめて登場しました。
March 22, 2013 FreeBSD