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_NODUMP と UF_OPAQUE フラグは、ファイルの所有者またはスーパユーザのいずれかよって設定または未設定とされます。
SF_IMMUTABLE, SF_APPEND, SF_NOUNLINK と SF_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 |