= extattr
extattr is filesystem extended attributes operation library for FreeBSD, GNU/Linux and Microsoft Windows.
----
extattr はファイルシステムの拡張属性を操作するライブラリで、FreeBSD、GNU/Linux、Windows に対応しています。
サポートされる環境で、統一的なメソッドを提供します。
== test system
- Microsoft Windows XP Professional SP3
- PC-BSD/AMD64 9.0
- lubuntu 12.04
== 簡易リファレンスマニュアル
クラスメソッドに『!』がついているものはシンボリックリンクに対する操作となります。
キーワード引数の namespace
を与えると、拡張属性の名前空間を指定できます。
規定値は EXTATTR_NAMESPACE_USER
で、ほかの値は EXTATTR_NAMESPACE_SYSTEM
のみが指定できます
(Windows 版では EXTATTR_NAMESPACE_USER
のみが指定可能です)。
拡張属性の属性名を取得:
File#extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) -> array
File#extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) -> array
File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) -> array
File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
拡張属性の要素の大きさを取得:
File#extattr_size(name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
File.extattr_size(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
File.extattr_size!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
拡張属性の要素を取得:
File#extattr_get(name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
File.extattr_get(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
File.extattr_get!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
拡張属性の要素を設定:
File#extattr_set(name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
File.extattr_set(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
File.extattr_set!(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
拡張属性の要素を削除:
File#extattr_delete(name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
File.extattr_delete(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
File.extattr_delete!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
== Microsoft Windows における諸注意
Windows 2000 以降でのみ動作します。Windows 9X シリーズでは require "extattr"
の段階で例外が発生するでしょう。
リパースポイント (ジャンクションやシンボリックリンク) に対する ADS は要素の取得や設定、削除は出来ません。
必ずリンク先に対する操作となります。
64 KiB を超える ADS は取得も設定も出来ません。
これは『拡張属性』と捉えた場合、巨大なデータを扱えるべきではないという考えによるためです
(本当のところは FreeBSD の拡張属性が最大 64KiB 弱であることが由来です)。
巨大な ADS を扱いたい場合は、File.open
でファイルとして扱えるので自由に読み書きできます
(これは ruby に限ったことではなく、Windows による仕様です)。
この場合の与えるファイル名は、path + ":" + name
という形になります。