Пишите на магнитную ленту конец записи linux

Задача - создать две записи разных размеров в одной записи файла. Я использую Python 3.4.5 для тестирования:

import fcntl
import os
import struct

MTIOCTOP = 0x40086d01  # refer to mtio.h
MTSETBLK = 20

fh = os.open('/dev/st2', os.O_WRONLY )
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 1024))
os.write(fh, b'a'*1024)
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 2048))
os.write(fh, b'b'*2048)
os.close(fh)


[root@dev2 mhvtl]# tcopy /dev/st2
file 0: block size 4096: 1 records
file 0: eof after 1 records: 4096 bytes <<< should be 2 records
eot
total length: 4096 bytes
[root@dev2 mhvtl]# ^C

Есть ли ioctl opt-код, который будет инициировать новую запись на ленте с переменной длиной записи. Или любой другой способ обойти эту ошибку?

2 ответа

Проблема была с tcopy, он использует размер блока на устройстве, а не обнаруживает его.

fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))

после последней записи разрешено отображать данные как задумано.

Как насчет чего-то нравится commands.getstatus('mt -f /dev/st2 fsf')

Другие вопросы по тегам