DIR(5) FreeBSD ファイルフォーマットマニュアル DIR(5)
名称
dir, dirent − ディレクトリファイルフォーマット |
書式
#include <dirent.h> |
解説
ディレクトリは、土台となる記憶媒体の詳細を隠蔽し、ファイルをグループ分け する便利な階層手段を提供します。ディレクトリファイルは、その inode(5) エ ントリ中のフラグによって、通常ファイルと区別されます。ディレクトリファイ ルはレコード (ディレクトリエントリ) から構成され、各レコードはファイルに 関する情報とそのファイル自身へのポインタを含んでいます。ディレクトリエン トリは、通常ファイルと同様に、他のディレクトリを含むこともあります。その ような入れ子になったディレクトリはサブディレクトリと呼ばれます。このよう にしてディレクトリとファイルの階層構造が形成され、この構造はファイルシス テムと呼ばれます (あるいはファイルシステムツリーと呼ばれます)。 各ディレクトリファイルには特別なディレクトリエントリが 2 つあります。 1 つはそのディレクトリ自身へのポインタで、ドット ‘.’ と呼ばれます。もう 1 つは自分の親ディレクトリへのポインタで、ドットドット ‘..’ と呼ばれます。 ドットとドットドットは有効なパス名ですが、システムのルートディレクトリ ‘/’ には親ディレクトリがなく、ドットドットはドットと同じく自分自身を指し ます。 ファイルシステムノードは普通のディレクトリファイルであり、その上に物理 ディスクやそのディスク中の分割された領域といったファイルシステムオブジェ クトを接合します ( mount(2) および mount(8) 参照)。 ディレクトリエントリの形式はファイル <sys/dirent.h> で定義されています ( これは直接アプリケーションからはインクルードされません): |
#ifndef |
_SYS_DIRENT_H_ |
||
#define |
_SYS_DIRENT_H_ |
#include <machine/ansi.h> /* struct dirent { |
__uint32_t d_fileno; |
/* エントリのファイル番号 */ |
||||
__uint16_t d_reclen; |
/* このレコードの長さ */ |
||||
__uint8_t d_type; |
/* ファイルタイプ、以下参照 */ |
||||
__uint8_t d_namlen; |
/* d_name の文字列長 */ |
#ifdef _POSIX_SOURCE |
char |
d_name[255 + 1]; |
/* 名前はこの長さを越えてはならない */ |
#else |
char d_name[MAXNAMLEN + 1]; /* 名前はこの長さを越えてはならない */ |
#endif }; /* |
#define |
DT_UNKNOWN |
0 |
|||
#define |
DT_FIFO |
1 |
|||
#define |
DT_CHR |
2 |
|||
#define |
DT_DIR |
4 |
|||
#define |
DT_BLK |
6 |
|||
#define |
DT_REG |
8 |
|||
#define |
DT_LNK |
10 |
|||
#define |
DT_SOCK |
12 |
|||
#define |
DT_WHT |
14 |
/* |
#define |
IFTODT(mode) |
(((mode) & 0170000) >> 12) |
|||
#define |
DTTOIF(dirtype) |
((dirtype) << 12) |
/* |
#define |
_GENERIC_DIRSIZ(dp) ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) |
#ifdef _KERNEL |
#define |
GENERIC_DIRSIZ(dp) |
_GENERIC_DIRSIZ(dp) |
#endif #endif /* !_SYS_DIRENT_H_ */ |
関連項目
バグ
struct dirent のメンバ d_type は FreeBSD 固有であり、使用はポータブルでは ありません。また、特定のファイルシステム、例えば cd9660 ファイルシステム では失敗します。 |
歴史
ファイル形式 dir は Version 7 AT&T UNIX で登場しました。 FreeBSD 10.0 April 19, 1994 FreeBSD 10.0 |