2016-10-11 13 views
1

タスクは、1つのファイルエントリ内にサイズの異なる2つのレコードを作成します。 私はテストのためのpython 3.4.5を使用しています:レコードの磁気テープの末尾にLinuxを書き込む

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) 


[[email protected] 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 
[[email protected] mhvtl]# ^C 

は、可変レコード長のテープに新しいレコードを開始しますのioctlオプトコードがあります。 またはこのバグを回避する他の方法?

答えて

0

問題はtcopyで検出されず、デバイス上のブロックサイズを使用していました。

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

最後に書き込みを実行すると、意図したとおりにデータが表示されます。

0

どのようにすればよいですかcommands.getstatus('mt -f /dev/st2 fsf')

関連する問題