バックアップ アプリケーションの作成
テープ上で入力または出力を実行するには、バックアップ アプリケーションはまずテープ デバイスのハンドルを取得する必要があります。 次のコード サンプルは、CreateFile 関数を使用してテープ デバイスを開く方法を示しています。
HANDLE hTape; // handle to tape device
hTape = CreateFile(TEXT("\\\\.\\TAPE0"), // tape dev to open
GENERIC_READ | GENERIC_WRITE, // read/write access
0, // not used
0, // not used
OPEN_EXISTING, // req for tape devs
0, // not used
NULL); // not used
ディレクトリ ツリーをテープにバックアップするには、アプリケーションで FindFirstFile 関数と FindNextFile 関数を使用してディレクトリ ツリーを走査する必要があります。 ファイルが見つかるたびに、アプリケーションは GetFileAttributes 関数を使用してファイル属性を取得する必要があります。
ハード リンクがある場合、アプリケーションはリンクの数を決定し、将来の比較のためにファイルの一意の識別子をテーブルに保存する必要があります。 ファイルが初めて見つかった場合、アプリケーションは CreateFile を使用してファイルを開き、BackupRead 関数を使用してバックアップを開始する必要があります。 その後、WriteFile 関数を繰り返し使用して、BackupRead によって使用されるバッファー内のすべての情報をテープに転送できます。 2 回目にファイルが見つかると (ハード リンクがある場合はファイル識別子のテーブルに対してチェック)、アプリケーションは一般的なファイル情報をテープに書き込み、その後に BACKUP_LINK を持つストリームを書き込むことができます。
テープからディスクにファイルを復元する場合、アプリケーションは CreateFile、BackupWrite、および ReadFile 関数を使用する必要があります。 テープ上の各ファイルについて、アプリケーションは CreateFile を使用してディスク上に新しいファイルを作成し、BackupWrite を使用してファイルの復元を開始する必要があります。 その後、ファイルのすべての情報が BackupWrite によって格納されたバッファーにテープから読み取られるまで、アプリケーションは ReadFile を繰り返し使用する必要があります。
BackupWrite バッファー内のいずれかのストリームに BACKUP_LINK ストリーム識別子がある場合、アプリケーションはハード リンクを確立する必要があります。 リンクを確立するために必要なデータが存在しない場合、BackupWrite は失敗します。 アプリケーションは、既存のカタログを使用して元のデータを見つけて復元したり、復元するファイル データが別の場所にあることをユーザーに通知したりできます。