|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Creating a Backup Application
To perform any input or output on a tape, a backup application must first obtain a handle of the tape device. The following code sample shows how to use the CreateFile function to open a tape device.
HANDLE hTape; /* handle to tape device */ hTape = CreateFile( "\\\\.\\TAPE0", /* name of tape device to open */ GENERIC_READ | GENERIC_WRITE, /* read-write access */ 0, /* not used */ 0, /* not used */ OPEN_EXISTING, /* required for tape devices */ 0, /* not used */ NULL); /* not used */
To back up a directory tree to a tape, an application must use the FindFirstFile and FindNextFile functions to traverse the directory tree. Each time a file is found, the application should get the file's attributes by using the GetFileAttributes function. If there are hard links, the application should determine the number of links and save the file's unique identifier in a table for future comparisons. The first time a file is found, the application should use CreateFile to open the file and the BackupRead function to begin the backup. Then it can use the WriteFile function repeatedly to transfer all the information in the buffer filled by BackupRead to the tape. The second time a file is found (checked against the table of file identifiers when there are hard links), the application can simply write the general file information to the tape, followed by a stream whose identifier is BACKUP_LINK.
When restoring files from tape to disk, an application must use the CreateFile, BackupWrite, and ReadFile functions. For each file on the tape, the application should use CreateFile to create a new file on disk and BackupWrite to begin restoring the file. Then it should use ReadFile repeatedly until all the information for the file has been read from the tape into the buffer filled by BackupWrite. If one of the streams in the BackupWrite buffer has a BACKUP_LINK stream identifier, the application must establish a hard link. If the data needed to establish the link does not exist, BackupWrite fails. The application can use a preexisting catalog to locate and restore the original data, or it can notify the user that the file data to be restored is in a different location.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Создание Резервного Приложения
Чтобы выполнять любой вклад или выход на ленте, резервное приложение должно сначала получить ручку устройства ленты. Кодовый образец следующего показывает как, чтобы использовать функцию CreateFile, чтобы открывать устройство ленты.
ПРООПЕРИРУЙТЕ hTape; /* ручка, чтобы приклеивать устройство */ hTape = CreateFile( "\\\\.\\TAPE0", /* имя устройства ленты, чтобы открываться */ GENERIC_READ | GENERIC_WRITE, /* прочитайте-доступ записи */ 0, /* не использованное */ 0, /* не использованное */ OPEN_EXISTING, /* необходимый для устройств ленты */ 0, /* не использованное */ НЕДЕЙСТВИТЕЛЬНЫЙ); /* не использованное */
Чтобы поддерживать дерево директория на ленту, приложение должно использовать FindFirstFile и функции FindNextFile, чтобы просматривать дерево директория. Всякий раз, когда файл обнаружен, приложение должно получить атрибуты файла используя функцию GetFileAttributes. Если есть жесткие связи, приложение должно определить количество связей и сохранять файловый уникальный идентификатор на столе для будущих сравнений. Сначала файл обнаружен, приложение должно использовать CreateFile, чтобы открывать файл и функция BackupRead, чтобы начинать копию. Затем это может использовать функцию WriteFile многократно, чтобы передавать всю информацию в буфер заполненный BackupRead на ленту. Второе время файл обнаружен (сверенное с таблицей файловых идентификаторов когда есть жесткие связи), приложение может просто записать общую файловую информацию на лента, сопровожденную потоком чей идентификатор - BACKUP_LINK.
При восстановлении файлов с ленты на диск, приложение должно использовать CreateFile, BackupWrite, и функции ReadFile. Для каждого файла на ленте, приложение должно использовать CreateFile, чтобы создавать новый файл на диске и BackupWrite, чтобы начинать восстанавливать файл. Затем это должно использовать ReadFile многократно пока вся информация для файла не прочитана с ленты в буфер заполненный BackupWrite. Если один из потоков в буфере BackupWrite имеют идентификатор потока BACKUP_LINK, приложение должно установить жесткую связь. Если данным нужно устанавливать, что связь не существует, BackupWrite терпит неудачу. Приложение может использовать предшествующий каталог, чтобы располагать и восстанавливать оригинальные данные, или это может уведомить пользователя, что файловые данные, которые нужно восстанавливать, - в другой позиции.
|
|
|
|
| |