首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在磁带机上编写EOF标记

如何在磁带机上编写EOF标记
EN

Stack Overflow用户
提问于 2020-07-31 04:32:08
回答 1查看 226关注 0票数 3

我在网络上搜索了很多东西,我无法找到用Python在磁带上写EOF标记的方法。

我有下面的代码(通过fcntl.ioctl使用Python ),它编写记录,但是在每个os.write之后,它不会编写EOF,而是将记录保存在单个文件上。从本质上说,我想把这些记录分成两个文件,其中有EOF标记吗?

代码:

代码语言:javascript
复制
import os
import struct
import fcntl

MTIOCTOP = 0x40086d01  # Do a magnetic tape operation
MTSETBLK = 20
TAPEDRIVE = '/dev/st1'

fh = os.open(TAPEDRIVE, os.O_WRONLY )
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))
os.write(fh, b'a'*1024)                                      #<- Does not add EOF mark after write
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))
os.write(fh, b'b'*2048)
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))
os.write(fh, b'c'*1024)
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))
os.write(fh, b'd'*2048)
os.close(fh)

磁带分析:

代码语言:javascript
复制
Commencing Reading Tape in Drive /dev/st1, blocksize = 32768
1024 2048 1024 2048
End of File Mark after 4 records
End of File Mark after 0 records
End of Tape
Tape Examination Complete, found 2 Files on tape`

我注意到mtio.h包含MTWEOF 这里,但我不知道如何通过ioctl实现这一点。

任何帮助都将不胜感激。

PS。我知道我可以使用mt -f /dev/st1 weof n#编写EOF标记,但我更愿意将其保留在Python中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 05:49:20

好的,在阅读了mtio.h手册页之后,我找到了它,希望它能对其他人有所帮助。

代码语言:javascript
复制
import os
import fcntl
import struct

MTIOCTOP    = 0x40086d01  # Do a magnetic tape operation refer to mtio.h 
#MTSETBLK   = 20          # Set a block size?
MTWEOF      = 5           # Define EOF mark variable refer to mtio.h 
TAPEDRIVE   = '/dev/st1'  # Tape drive location

fd = os.open(TAPEDRIVE, os.O_WRONLY )                          # Open device for write   
#fcntl.ioctl(fd, MTIOCTOP, struct.pack('hi', MTSETBLK, 32768)) # Set a block size?
                  
for _ in range(5):                                            
    os.write(fd, b'a'*1024)                                    # Write some bytes
    fcntl.ioctl(fd, MTIOCTOP, struct.pack('hi', MTWEOF, 1))    # Write end-of-file (1)

fcntl.ioctl(fd, MTIOCTOP, struct.pack('hi', MTWEOF, 2))        # Write end-of-tape (2)
os.close(fd)

磁带分析

在驱动器/dev/st1中开始阅读磁带,区块大小= 32768 1024 1024 1024文件标记结束后1记录结束的磁带检查完成后,发现5个文件在磁带上

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63185830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档