DIR(5) — NEWS-OS 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;
long dd_bbase;
long dd_entno;
long dd_bsize;
char ∗dd_buf;
} DIR;
伝統的に、それぞれのディレクトリ内の最初の 2つのエントリは、 . と .. のためのものです。 最初のエントリは、ディレクトリ自体のためのエントリです。 2 番目のエントリは、親ディレクトリ用のエントリです。 マスタファイルシステム (/) のルートディレクトリについては、 .. の意味が修正され、 . と同じ意味になります。
関連事項
NEWS-OSRelease 4.2.1R