Vt extern const char *chunk_n[] ; Ft const char * Fn slice_type_name int type int subtype Ft struct disk * Fn Open_Disk const char *devname Ft struct disk * Fn Clone_Disk struct disk *disk Ft void Fn Free_Disk struct disk *disk Ft void Fn Debug_Disk struct disk *disk Ft void Fn Set_Bios_Geom struct disk *disk u_long cyl u_long heads u_long sects Ft int Fn Delete_Chunk struct disk *disk struct chunk * Ft void Fn Collapse_Disk struct disk *disk Ft int Fn Collapse_Chunk struct disk *disk struct chunk *chunk Ft int Fn Create_Chunk struct disk *disk u_long offset u_long size chunk_e type int subtype u_long flags Ft void Fn All_FreeBSD struct disk *d int force_all Ft char * Fn CheckRules struct disk * Ft char ** Fn Disk_Names void Ft void Fn Set_Boot_Mgr struct disk *d const u_char *bootmgr const size_t bootmgr_size Ft int Fn Set_Boot_Blocks struct disk *d const u_char *boot1 const u_char *boot2 Ft int Fn Write_Disk struct disk *d Ft int Fn Cyl_Aligned struct disk *d u_long offset Ft u_long Fn Next_Cyl_Aligned struct disk *d u_long offset Ft u_long Fn Prev_Cyl_Aligned struct disk *d u_long offset Ft int Fn Track_Aligned struct disk *d u_long offset Ft u_long Fn Next_Track_Aligned struct disk *d u_long offset Ft u_long Fn Prev_Track_Aligned struct disk *d u_long offset Ft struct chunk * Fn Create_Chunk_DWIM struct disk *d struct chunk *parent u_long size chunk_e type int subtype u_long flags Ft int Fn MakeDev struct chunk *c const char *path Ft int Fn MakeDevDisk struct disk *d const char *path Ft char * Fn ShowChunkFlags struct chunk *c Ft char * Fn ChunkCanBeRoot struct chunk *c
どちらの型もプログラマにはわかりにくいので、完全を期すために 以下に内部構造を示します。
関数によるフラグ値は `DISK_ON_TRACK' だけで、ディスクが On-Track ディスクマネージャによって 操作されていることを意味します。struct disk { char *name; u_long flags; u_long bios_cyl; u_long bios_hd; u_long bios_sect; u_char *bootmgr; u_char *boot1; u_char *boot2; struct chunk *chunks; u_long sector_size; };
`type' フィールドは `whole,' unknown, fat, freebsd, extended, part, unused のうち、どれか一つの値を取ります。struct chunk { struct chunk *next; struct chunk *part; struct disk *disk; long offset; u_long size; u_long end; char *name; char *oname; chunk_e type; int subtype; u_long flags; void (*private_free)(void*); void *(*private_clone)(void*); void *private_data; };
以下は `struct' chunk において `flags' が取ることのできる値です。
フィールド `private_data,' `private_free', private_clone は、 アプリケーション固有のデータ、およびその管理のためのものです。この 機能がなければ、記憶域の管理はできず、クローニングによりポインタが 複製されても解放できなくなります。
Fn Open_Disk は、名前付ディスクを open し、一群 (populated) のツリーを 返します。
Fn Clone_Disk は、ツリーの複製を作成します。 ``Undo'' 機能に便利です。
Fn Free_Disk は、 Fn Open_Disk または Fn Clone_Disk で作成されたツリーを解放します。
Fn Debug_Disk は、標準出力 (stdout) のツリーの内容を出力します。
Fn Set_Bios_Geom は、 BIOS が使うジオメトリを設定します。
Fn Delete_Chunk は、disk_space の領域を解放します。
Fn Collapse_Disk および Fn Collapse_Chunk は、まだ試験的なものなので使ってはいけません。
Fn Create_Chunk は、指定されたパラメータを持つ領域を生成します。
Fn All_FreeBSD は、ディスク全体を一つの Fx の領域を作成します。 `force_all' が設定されていると、BIOS によるジオメトリ解釈をすべて無視します。
Fn CheckRules は、このディスクレイアウトの矛盾した区画規則についての警告を 文字列 `char*' として返します。
Fn Disk_Names は、 すべてのディスク名 (wd0, wd1 ...) を格納した文字列群 `char**' を返します。 配列と同様、各ポインタを手動で解放しなければなりません。
Fn Set_Boot_Mgr は、このブートマネージャをディスク上で使うように設定します。 Fn Write_Disk が呼び出されるときに書き込まれたものを取得します。
Fn Set_Boot_Blocks は、ディスク上で使われるブートブロックを設定します。 Fn Write_Disk が呼び出されるときに書き込まれたものを取得します。
Fn Write_Disk は、MBR 、ディスクラベル、ブートブロック、ブートマネージャ すべてを書き込みます。
Fn Cyl_Aligned は、BIOS ジオメトリに従って `offset' がシリンダ上に整合しているかどうかを調べます。
Fn Next_Cyl_Aligned は、BIOS ジオメトリに従って `offset' を次のシリンダに切り上げて配置します。
Fn Prev_Cyl_Aligned は、BIOS ジオメトリに従って `offset' を前のシリンダに切り下げて配置します。
Fn Track_Aligned は、BIOS ジオメトリに従って `offset' がトラック上に配置されているかどうかを調べます。
Fn Next_Track_Aligned は、BIOS ジオメトリに従って `offset' を次のトラックに切り上げて配置します。
Fn Prev_Track_Aligned は、BIOS ジオメトリに従って `offset' がトラック上に配置されているかどうかを調べます。
Fn Create_Chunk_DWIM は、指定された親領域内に指定サイズのパーティションを生成し、 そのポインタを返します。 最初に見つかった十分な大きさの未使用領域が使われます。
Fn MakeDev は、この領域のデバイスノードを作成します。
Fn MakeDevDisk は、ディスク上にあるすべての領域のデバイスノードを作成します。
Fn ShowChunkFlags は、フラグを表示する文字列を返します。
Fn ChunkCanBeRoot は、領域が `/' になれるならばヌルを返します。
領域名を示す文字列は、外部配列変数 chunk_n を使って直接アクセスできます。
Fn slice_type_name は、指定された `type' `subtype' に関連づけられた名前文字列を返します。 Fn slice_type_name がスライスに対して "unknown" を返すのは、 未知の場合、すなわち `/' です。
このマニュアルページの執筆者は An J:org Wunsch です。