3

必须将许多大文件连接成一个更大的单个文件,我们目前使用

猫文件1文件2 ...输出文件
但想知道是否可以比与那个老朋友更快地完成。

阅读手册页sendfile(),可以指定 *input_file* 的偏移量,从哪里将其剩余部分发送到 *output_file*。但是:我还可以指定 *output_file* 的偏移量吗?或者我可以简单地循环所有输入文件,只需打开我的输出 FD 和 sendfile()'ing 重复进入它,有效地连接 *input_files*?换句话说:如果我不关闭它也不在其中寻找(),指向我的输出 FD 的文件指针是否会保留在其末尾?

有人知道这样的cat实现sendfile()吗?


诚然,我是管理员,而不是程序员,所以请忍受我缺乏“真正的”编码知识......

4

1 回答 1

3

是的,输出 fd 的文件指针将保留在其末尾(如果文件是新文件或不大于您已经写入的数据)。

sendfile()的文档明确提到(强调我的):

在 2.6.33 之前的 Linux 内核中,out_fd必须引用一个套接字。从 Linux 2.6.33 开始,它可以是任何文件。如果是普通文件,则 sendfile()适当更改文件偏移量

我个人从未见过cat依赖. 也不是可移植的,因此这样做会导致仅在 Linux 2.6.33+ 上运行的版本(尽管我猜它仍然可以作为在编译时激活的平台相关优化来实现)。sendfile()out_fdfileno(stdout)sendfile()cat

于 2013-04-02T17:24:13.333 回答