在linux中,需要合并多个文件,一般情况下使用cat合并即可,但是在超大文件合并的时候cat的速度显得有点慢,还因为读写操作会遇到IO瓶颈。是否有更快的合并方法呢?
尝试过使用fcat(rust工具号称比cat快三倍),测试速度也不理想。
我设想了一种理想的合并方式,就是将上一个文件的最后一个字符的地址与下一个文件的第一个字符的地址连接,两个文件本质上在磁盘上的位置不动,完全不涉及IO,世界上有这种合并方式吗?
1 回答1.4k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
2 回答847 阅读✓ 已解决
1 回答775 阅读✓ 已解决
1 回答1.7k 阅读
1 回答603 阅读✓ 已解决
核心思路
使用 sendfile() 进行内核态数据传输,避免用户态的读写操作,提高合并速度。同时结合 O_DIRECT 选项,让数据直接从磁盘读写,不经过操作系统缓存,减少 CPU 负担。
具体实现
编写一个 C 语言程序,利用 sendfile() 进行超高速文件合并:
如何使用
1.编译代码
2.执行合并
我上面的例子用了.bin 代表 二进制文件,适用于任何类型的数据,避免格式歧义。如果你的数据是文本,可以换成.txt,如果是日志,可以换成 .log,根据你的需求修改。