我正在使用brtfs,我希望我的Java程序复制一组大文件,即写即复制。
换句话说,在某个库中,cp --reflink=auto
的等价物是什么,希望有人听说过,所以他们可以告诉我?: -)
据我所知,没有特定于java的API,因为这是一个相当特定的、依赖于操作系统和文件系统的特性。然而,在一个可以发出ioctl的库的帮助下(例如,这个库我没有隶属关系,是通过谷歌找到的),你可以发出ficlonerange
ioctl。
struct file_clone_range {
__s64 src_fd;
__u64 src_offset;
__u64 src_length;
__u64 dest_offset;
};
这在Java中有点迂回,但作为一个例子,您应该能够使用链接库执行以下操作:
- 分配一个直接缓冲区,
- 填充其参数(注意正确处理机器端序);你还需要打开fd。
- 获取
Native.getDirectBufferPointer
指针 - 错误-如果ioctl失败或不支持,检查结果并采取适当的操作。
如果这看起来太脆弱,可以考虑编写一个C或c++库来调用ioctl并具有更方便的API,然后通过JNI调用它。