Next: , Previous: , Up: ファイルの情報   [Contents][Index]


26.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
Function: file-attributes filename &optional id-format

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

GNUプラットフォームではこの関数はロックファイル処理時はアトミックである。別のプロセスによりファイルシステムが同時に変更された場合には、この関数は変更の前か後のいずれかのファイル属性をリターンする。それ以外ならこの関数はアトミックではなく競合状態を検知したらnil、または以前とカレントが混ざったファイル属性をリターンするかもしれない。

このリスト内の要素にアクセスするためにアクセッサ関数が提供される。このアクセッサ以下の要素の記述とともに示される。

リストの要素は順に:

  1. ディレクトリーにたいしてはt、シンボリックリンクにたいしては文字列(リンクされる名前)、テキストファイル(file-attribute-type)にたいしてはnil
  2. そのファイルがもつ名前の個数(file-attribute-link-number)。ハードリンクとして知られる代替え名は関数add-name-to-fileを使用して作成できる(ファイルの名前と属性の変更を参照)。
  3. ファイルのUIDであり通常は文字列file-attribute-user-id。しかし名前をもつユーザーに対応しなければ値は整数。
  4. 同様にファイルのGID (file-attribute-group-id)。
  5. Lispのタイムスタンプによる最終アクセス時刻(file-attribute-access-time)。タイムスタンプはcurrent-time (時刻を参照)の形式であり、ファイルシステムのタイムスタンプの精度に切り詰められる。たとえばFATベースのいくつかのファイルシステムでは最終アクセスの日付だけが記録されるので、この時刻には常に最終アクセス日の真夜中が保持されることに注意。
  6. Lispのタイムスタンプによる最終変更時刻(file-attribute-modification-time)。これはファイルのコンテンツが変更された最終時刻。
  7. Lispのタイムスタンプによるステータスの最終変更時刻(file-attribute-status-change-time。上記参照)。これはファイルのアクセスモードビット、所有者とグループ、およびファイルにたいしてファイルのコンテンツ以外にファイルシステムが記録するその他の情報にたいする最終変更時刻。
  8. ファイルのバイトサイズ(file-attribute-size)。
  9. ls -l’で表示されるような10個の文字、またはダッシュからなる文字列で表されるファイルのモード(file-attribute-modes)。
  10. 後方互換のために提供される不定値。
  11. ファイルのinode番号であり非負の整数(file-attribute-inode-number)。
  12. そのファイルがあるデバイスのファイルシステム番号(file-attribute-device-number)を表す整数。この要素とファイルのinode番号を併せればシステム上の2つのファイルを区別するのに足る情報が得られる(2つのファイル両方がこれらの番号で同じ値をもつことはできない)。

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

(file-attributes "files-ja.texi" 'string)
     ⇒  (nil 1 "lh" "users"
          (20614 64019 50040 152000)
          (20000 23 0 0)
          (20614 64555 902289 872000)
          122295 "-rw-rw-rw-"
          t 6473924464520138
          1014478468)

この結果を解釈すると:

nil

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

1

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

"lh"

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

"users"

名前"users"のグループ。

(20614 64019 50040 152000)

最終アクセス日時がUTCで2012年10月23日の20:12:03.050040152。

(20000 23 0 0)

最終変更日時がUTCで2001年07月15日の08:53:43。

(20614 64555 902289 872000)

ステータスの最終変更日時がUTCで2012年10月23日の20:20:59.902289872。

122295

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

"-rw-rw-rw-"

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

t

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

6473924464520138

inode番号は6473924464520138。

1014478468

ファイルシステムのデバイス番号は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