2016-10-11 6 views
1

La tâche consiste à créer deux enregistrements de tailles différentes dans une entrée de fichier. J'utilise python 3.4.5 pour le test:Écrire une fin de bande magnétique sur l'enregistrement 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 

Y at-il un code d'opt ioctl qui lancera un nouveau record sur la bande avec une longueur d'enregistrement variable. Ou toute autre façon de contourner ce bug?

Répondre

0

Problème avec tcopy, il utilise la taille de bloc sur le périphérique au lieu de le détecter.

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

après la dernière écriture autorisée tcopy pour afficher les données comme prévu.

0

Que diriez-vous de quelque chose aime commands.getstatus('mt -f /dev/st2 fsf')