테이프 입력 및 출력

애플리케이션이 테이프 드라이브에서 입력 및 출력(I/O)을 수행하는 데 사용할 수 있는 몇 가지 함수가 있습니다. 테이프 I/O는 통신 디바이스에서 수행되는 I/O와 유사합니다.

테이프 I/O를 수행할 때 일부 테이프 드라이브는 테이프의 처음 몇 블록에 테이프 펌웨어 정보를 저장하며, 일반적으로 처음 100개 블록 중 일부를 사용합니다. 애플리케이션은 이러한 블록을 사용하면 안 됩니다. 이 주제에 대한 자세한 내용은 개별 테이프 시스템 제조업체에서 확인할 수 있습니다. 일반적으로 테이프의 처음 100개 블록을 건너뛰는 애플리케이션은 테이프 드라이브의 특이성을 방지합니다.

GetTapePositionSetTapePosition 함수는 현재 테이프 위치를 검색하고 이동합니다. WriteTapemark 함수는 지정된 수의 setmark, filemarks, short filemarks 및 long filemarks를 씁니다. EraseTape 함수는 테이프의 전체 또는 일부를 지웁니다.

ReadFileWriteFile 함수는 테이프에서 파일 데이터를 읽고 씁니다. 데이터는 전체 블록으로 읽고 기록됩니다. 테이프의 블록 크기가 512바이트인 경우 모든 읽기 및 쓰기 작업은 해당 블록 크기의 단순 정수 배수인 버퍼(512, 1024, 1536, 2048 등)를 사용해야 합니다. 전부는 아니지만 대부분 드라이브는 테이프를 되감은 후 또는 읽기 작업이 데이터 끝 오류 메시지를 생성한 후에만 쓰기 작업을 허용합니다.

가변 길이 블록 모드의 테이프에서 파일 데이터를 읽거나 쓰려면 다음 단계를 수행합니다.

  1. GetTapeParameters 함수를 호출하고 반환된 TAPE_GET_DRIVE_PARAMETERS 구조체의 FeaturesLow 멤버의 TAPE_DRIVE_VARIABLE_BLOCK 비트를 확인하여 테이프 드라이브가 가변 길이 블록 모드를 지원하는지 여부를 확인합니다.
  2. SetTapeParameters 함수를 호출하고 TAPE_SET_MEDIA_PARAMETERS 구조체의 BlockSize 멤버를 0으로 설정하여 변수 블록 크기 모드를 지정합니다. 그런 다음 ReadFile 또는 WriteFile 을 사용하여 파일 데이터를 읽거나 씁니다.

ReadFile에서 파일 표시가 발견되면 파일 표시까지의 데이터를 읽고 함수가 실패합니다. GetLastError 함수는 발생한 파일 표시의 형식을 나타내는 오류 코드를 반환합니다. 운영 체제는 테이프를 파일 표시를 지나 이동하며 애플리케이션은 ReadFile을 다시 호출하여 계속 읽을 수 있습니다.

ReadFileWriteFile 은 데이터 스트림만 읽고 씁니다. BackupReadBackupWrite 함수는 파일과 연결된 모든 스트림을 읽고 씁니다. 여기에는 데이터, 확장 특성, 보안 및 대체 데이터 스트림이 포함됩니다. 보안 및 대체 데이터 스트림은 NTFS 파일 시스템 파티션에서만 관련이 있습니다.

BackupSeek 함수는 BackupRead 또는 BackupWrite에서 처음 액세스한 파일에서 앞으로 찾습니다. 이 함수를 사용하면 애플리케이션이 액세스 오류를 일으키는 정보를 건너뛸 수 있습니다.

애플리케이션이 파일 데이터에만 액세스해야 하는 경우 ReadFileWriteFile을 사용해야 합니다. 이러한 함수는 CreateFile 함수를 사용하여 스트림을 만든 경우 대체 데이터 스트림을 읽을 수도 있습니다.

테이프 백업 애플리케이션은 BackupReadBackupWrite 를 사용하여 파일과 관련된 모든 정보를 복사해야 합니다. 그러나 이러한 함수는 특성, 파일 생성 시간 등과 같은 파일 특성을 읽거나 쓰지 않습니다. 애플리케이션은 GetFileAttributesSetFileAttributes와 같은 파일 입력 및 출력 함수를 사용하여 해당 값을 검색하고 설정해야 합니다.