我正在尝试复制临时文件,但不幸的是下面的代码返回-1(失败):
import ctypes, tempfile
from ctypes import *
t_file=tempfile.NamedTemporaryFile(delete=True, dir=".", prefix="temp_file_")
libc=cdll.LoadLibrary("libc.so.6")
libc.fallocate(t_file.fileno(), c_int(0), c_longlong(0), c_longlong(102400))
但是,我可以通过命令行
完成以下操作hdparm --fallocate 10 ./temp_file_foo
应该这样做。如果重要,这是在ext4文件系统上完成的。
我遇到的另一个问题是libc.fallocate是否将零写入磁盘,还是将块标记为未初始化?
答案 0 :(得分:3)
听起来像是在32位系统上,fallocate
系统调用默认采用(32位)整数。有些系统在fallocate64
中也会有一个64位的对应物,它需要64位的偏移量和长度。试试吧。
请注意,本机64位系统只有fallocate
,但它需要64位参数。