Next: , Previous: , Up: Information about Files   [Contents][Index]


24.6.4 ファイルの属性

このセクションではファイルの詳細な情報を取得する関数について説明します。それらの情報にはファイルの所有者やグループの番号、ファイル名の個数、inode番号、サイズやアクセス日時、変更日時が含まれます。

Function: file-newer-than-file-p filename1 filename2

この関数はファイルfilename1がファイルfilename2より新しければtをリターンする。filename1が存在しなければnilfilename1は存在するがfilename2が存在しなければtをリターンする。

以下の例では、aug-19の書き込みが19日、aug-20の書き込みが20日、ファイルno-fileは存在しないものとする。

(file-newer-than-file-p "aug-19" "aug-20")
     ⇒ nil
(file-newer-than-file-p "aug-20" "aug-19")
     ⇒ t
(file-newer-than-file-p "aug-19" "no-file")
     ⇒ t
(file-newer-than-file-p "no-file" "aug-19")
     ⇒ nil

以下の2つの関数のfilename引数がシンボリックリンクなら、これらの関数はそれをリンクターゲットで置き換えません。しかしどちらの関数も、親ディレクトリーのすべての階層においてシンボリックリンクを再帰的にフォローします。

Function: file-attributes filename &optional id-format

この関数はファイルfilenameの属性(attributes)のリストをリターンする。オープンできないファイルが指定されるとnilをリターンする。オプション引数id-formatは属性UIDGID(以下参照)にたいして望ましいフォーマットを指定する。有効な値は'string'integer。デフォルトは'integerだが、わたしたちはこれの変更を計画しているので、リターンされるUIDGIDを使用する場合には、id-formatにたいして非nil値を指定すること。

リストの要素は順に:

  1. ディレクトリーにたいしてはt、シンボリックリンクにたいしては文字列(リンクされる名前)、テキストファイルにたいしてはnil
  2. そのファイルがもつ名前の個数。ハードリンクとして知られる代替え名は、関数add-name-to-fileを使用して作成できる(Changing Filesを参照)。
  3. ファイルのUIDであり通常は文字列。しかし名前をもつユーザーに対応しなければ値は整数。
  4. 同様にファイルのGID
  5. 最終アクセス時刻を表す4つの整数(sec-high sec-low microsec picosec)からなるリスト(これはcurrent-timeの値と似ている。Time of Dayを参照)。いくつかのFATベースのファイルシステムでは最終アクセスの日付だけが記録されるので、この時刻には常に最終アクセス日の真夜中が保持されることに注意。
  6. 最終変更時刻を表す4つの整数からなるリスト(上記参照)。これはファイルのコンテンツが変更された最終時刻。
  7. ステータスの最終変更時刻を表す4つの整数からなるリスト(上記参照)。これはファイルのアクセスモードビット、所有者とグループ、およびファイルにたいしてファイルのコンテンツ以外にファイルシステムが記録するその他の情報にたいする最終変更時刻。
  8. ファイルのサイズ(バイト)。Lisp整数の範囲を超える大きさのサイズでは浮動小数点数。
  9. ls -l’で表示されるような10個の文字、またはダッシュからなる文字列で表されるファイルのモード。
  10. 後方互換のために提供される不定値。
  11. ファイルのinode番号。可能な場合は整数。Emacs Lispの整数として表せる範囲より大きいinode番号は整数で表現可能な値を得るために2^{16}で除されて(high . low)という形式の値になる。ここでlowは下位16ビット。それにたいしてすらinode番号が大きければ、値は(high middle . low)という形式になる。ここでhighは上位ビット、middleは中位24ビット、lowは下位16ビットを保持する。
  12. そのファイルがあるデバイスのファイルシステム番号。その大きさにより値は整数、またはinode番号と同じ様式のコンスセル。この要素とファイルのinode番号を併せれば、システム上の2つを区別するに足る情報が得られる(2つのファイルがこれら両方の番号で同じ値をもつことはできない)。

たとえば以下はfiles.texiのファイル属性:

(file-attributes "files.texi" 'string)
     ⇒  (nil 1 "lh" "users"
          (20614 64019 50040 152000)
          (20000 23 0 0)
          (20614 64555 902289 872000)
          122295 "-rw-rw-rw-"
          t (5888 2 . 43978)
          (15479 . 46724))

この結果を解釈すると:

nil

ディレクトリーでもシンボリックリンクでもない。

1

(カレントデフォルトディレクトリー内で名前files.texiは)単一の名前をもつ。

"lh"

名前"lh"のユーザーにより所有される。

"users"

名前"users"のグループ。

(20614 64019 50040 152000)

最終アクセスがOctober 23, 2012, at 20:12:03.050040152 UTC。

(20000 23 0 0)

最終更新がJuly 15, 2001, at 08:53:43 UTC。

(20614 64555 902289 872000)

最終ステータス変更がOctober 23, 2012, at 20:20:59.902289872 UTC。

122295

バイト長は122295バイト(しかしマルチバイトシーケンスが含まれていたり、EOLフォーマットがCRLFなら122295文字は含まれないかもしれない)。

"-rw-rw-rw-"

所有者、グループ、その他にたいして読み取り、書き込みアクセスのモードをもつ。

t

単なるプレースホルダーであり何の情報ももたない。

(5888 2 . 43978)

inode番号は6473924464520138。

(15479 . 46724)

ファイルシステムのデバイス番号は1014478468。

この関数はファイルfilenameがもつ名前(ハードリンク)の個数をリターンする。ファイルが存在しなければこの関数はnilをリターンする。シンボリックリンクはリンク先のファイルの名前とは判断されないのでこの関数に影響しないことに注意。

$ ls -l foo*
-rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo
-rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo1

(file-nlinks "foo")
     ⇒ 2
(file-nlinks "doesnt-exist")
     ⇒ nil

Next: , Previous: , Up: Information about Files   [Contents][Index]