백업 애플리케이션 만들기

테이프에서 입력 또는 출력을 수행하려면 백업 애플리케이션이 먼저 테이프 디바이스의 핸들을 가져와야 합니다. 다음 코드 샘플에서는 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

디렉터리 트리를 테이프에 백업하려면 애플리케이션이 FindFirstFileFindNextFile 함수를 사용하여 디렉터리 트리를 트래버스해야 합니다. 파일을 찾을 때마다 애플리케이션은 GetFileAttributes 함수를 사용하여 파일 특성을 가져와야 합니다.

하드 링크가 있는 경우 애플리케이션은 링크 수를 확인하고 이후 비교를 위해 파일의 고유 식별자를 테이블에 저장해야 합니다. 파일이 처음 발견되면 애플리케이션은 CreateFile 을 사용하여 파일을 열고 BackupRead 함수를 사용하여 백업을 시작해야 합니다. 그런 다음 WriteFile 함수를 반복적으로 사용하여 BackupRead 에서 사용하는 버퍼의 모든 정보를 테이프로 전송할 수 있습니다. 파일이 두 번째로 발견되면(하드 링크가 있을 때 파일 식별자 테이블에 대해 확인됨) 애플리케이션은 테이프에 일반 파일 정보를 쓴 다음 BACKUP_LINK 식별자가 있는 스트림을 작성할 수 있습니다.

테이프에서 디스크로 파일을 복원할 때 애플리케이션은 CreateFile, BackupWriteReadFile 함수를 사용해야 합니다. 테이프의 각 파일에 대해 애플리케이션은 CreateFile 을 사용하여 디스크에 새 파일을 만들고 BackupWrite 를 사용하여 파일 복원을 시작해야 합니다. 그런 다음, 파일의 모든 정보를 테이프에서 BackupWrite로 채워진 버퍼로 읽을 때까지 애플리케이션에서 ReadFile을 반복적으로 사용해야 합니다.

BackupWrite 버퍼의 스트림 중 하나에 BACKUP_LINK 스트림 식별자가 있는 경우 애플리케이션은 하드 링크를 설정해야 합니다. 링크를 설정하는 데 필요한 데이터가 없으면 BackupWrite가 실패합니다. 애플리케이션은 기존 카탈로그를 사용하여 원래 데이터를 찾아서 복원하거나 복원할 파일 데이터가 다른 위치에 있음을 사용자에게 알릴 수 있습니다.