DIR(5) — UNIX Programmer’s Manual
名称
dir − ディレクトリのフォーマット
形式
#include<sys/types.h> #include<sys/dir.h>
解説
ディレクトリは、ユーザがディレクトリ自身に書き込みを行うことが できないことを除き、普通のファイルとまったく同じように挙動します。 あるファイルがディレクトリであるか否かは、i ノードエントリの フラグワード内のビットによって示されます (fs(5) を参照のこと)。インクルードファイル内に収められるディレクトリエントリの 構造を次に示します。
/∗
∗ ディレクトリは、いくつかの DIRBLKSIZ バイトの大きさで示される
∗ ブロックから構成される。ただし、DIRBLKSIZ は、一回の基本単位
∗ 操作でディスクに転送できるように選択される(例えば、大部分の
∗ マシンでは 512 バイト)。
∗
∗ それぞれの DIRBLKSIZ バイトサイズのブロックには、長さの異なる
∗ いくつかのディレクトリエントリ構造体が含まれる。それぞれの
∗ ディレクトリエントリは、その先頭に direct 構造体を備えており、
∗ i ノード番号、エントリの長さ、そのエントリ内の名称の長さを含んで
∗ いる。こうしたエントリの後には、ナルバイトと共に 4バイト境界に埋め
∗ 込まれた名称が続く。すべての名称の最後にはナルが付けられる。
∗ ディレクトリ内の名称の最大長は MAXNAMLEN で示される長さである。
∗
∗ マクロ DIRSIZ(dp) は、ディレクトリエントリを示すために必要とされる
∗ 空間を示す。ディレクトリ内の空き空間は、dp−>d_reclen>DIRSIZ(dp)
∗ を備えたエントリによって示される。ディレクトリブロック内のすべての
∗ DIRBLKSIZ の大きさは、こうしたディレクトリエントリによって示される。
∗ これは、普通、大きな dp−>d_reclen を備えたディレクトリ内の最後の
∗ エントリになる。エントリがディレクトリから削除されると、その空間は、
∗ 同じディレクトリブロック内の前のエントリに戻され、そのエントリの
∗ dp−>d_reclen の値が増加する。ディレクトリブロックの最初のエントリが
∗ 空いている場合には、その dp−>d_ino は 0 に設定される。ディレクトリ内
∗ の最初のエントリ以外のエントリは、通常、dp−>d_ino を 0 に設定しない。
∗/
#ifdef KERNEL
#define DIRBLKSIZ DEV_BSIZE
#else
#define DIRBLKSIZ 512
#endif
#define MAXNAMLEN 255
/∗
∗ DIRSIZ マクロは、そのディレクトリエントリを維持するために必要な
∗ 最小レコード長を与える。これは、d_name フィールドのない direct
∗ 構造体に加えて、ナルバイトで終了する 4バイト境界でまるめられた
∗ 十分なネームスペース(dp−>d_namlen+1)を必要とする。
∗/
#undef DIRSIZ
#define DIRSIZ(dp) \
((sizeof (struct direct) − (MAXNAMLEN+1)) + (((dp)−>d_namlen+1 + 3) &~ 3))
structdirect {
u_longd_ino;
shortd_reclen;
shortd_namlen;
chard_name[MAXNAMLEN + 1];
/∗ 一般にはもっと短くなる ∗/
};
struct _dirdesc {
intdd_fd;
longdd_loc;
longdd_size;
chardd_buf[DIRBLKSIZ];
};
伝統的に、それぞれのディレクトリ内の最初の 2つのエントリは、 ‘.’と‘..’のためのものです。 最初のエントリは、ディレクトリ自体のためのエントリです。 2番目のエントリは、親ディレクトリ用のエントリです。 マスタファイルシステム(“/”)のルートディレクトリについては、 ‘..’の意味が修正され、‘.’と同じ意味になります。
関連事項
NEWS-OSRelease 3.3