最新の「新着記事」はここから New!
2008-05-12
stat関数 - ファイルの詳細な情報を取得する
ファイルの詳細な情報を取得するにはstat関数を使用します。
my @infos = stat $file;
以下がstatで取得できる情報です。
| 0 | ファイルシステムのデバイス番号 |
| 1 | iノード番号 |
| 2 | ファイルモード |
| 3 | このファイルへのハードリンク数 |
| 4 | ファイルの所有者のユーザID( 数字 ) |
| 5 | ファイルの所有者のグループID( 数字 ) |
| 6 | デバイス識別子 |
| 7 | ファイルのサイズ( バイト ) |
| 8 | 最終アクセスしてからの経過したエポックからの秒数 |
| 9 | 最終更新してからの経過したエポックからの秒数 |
| 10 | iノードが変更されてから経過したエポック時からの秒数 |
| 11 | ファイルの読み書きに適切だと考えられるブロックサイズ |
| 12 | 割り当てられている実際のブロック数 |
サンプル
stat関数を使ってファイルの詳細な情報を取得するサンプルです。
use strict; use warnings; # ファイルの詳細な情報を取得する stat my $file = 'a.txt'; my @stat_inf = stat $file; # statの解説の作成 my @stat_exp = ( '0 dev ファイルシステムのデバイス番号', '1 ino iノード番号', '2 mode ファイルモード', '3 nlink このファイルへのハードリンク数', '4 uid ファイルの所有者のユーザID( 数字 )', '5 gid ファイルの所有者のグループID( 数字 )', '6 rdev デバイス識別子', '7 size ファイルのサイズ( バイト )', '8 atime 最終アクセスしてからの経過したエポック時からの秒数', '9 mtime 最終更新してからの経過したエポック時からの秒数', '10 ctime iノードが変更されてから経過したエポック時からの秒数', '11 blksize ファイルの読み書きに適切だと考えられるブロックサイズ', '12 blocks 割り当てられている実際のブロック数', ); if (@stat_inf) { for my $i (0 .. 12) { # statの情報と解説を結びつけて、出力。 printf("%-15s%s\n", $stat_inf[$i], $stat_exp[$i]); } } else { print "stat $file は失敗しました。\n" }
簡単な補則
- デバイス番号:ファイルシステムは、デバイス(ハードディスク)に関連づけられて、構築されます。そのハードディスクを識別する番号です( たぶん )。 → ファイルシステム
- iノード: Unix系OSにおいて、ファイルを管理するための識別子のようなものです。→ iノード
- ファイルモード: Unixにおけるファイルタイプとパーミッションを表す値です。→ ファイルタイプとパーミッション
- ハードリンク: Unix系のOSでは、ファイルに別名をつけることができます。ハードリンク数とは、このファイルを指す別名の総数のことです。→ ハードリンク


