我们必须将大量文件连接成更大的单个文件,我们目前使用
cat file1 file2 ... output_file但是想知道它是否可以比那位老朋友做得更快。
读取sendfile()
的手册页,可以指定* input_file *的偏移量,从哪里将其余部分发送到* output_file *。但是:我还可以在* output_file *中指定一个偏移量吗?
或者我可以简单地循环遍历所有输入文件,只需将输出FD和sendfile()重复打开它,有效地连接* input_files *?
换句话说:如果我不关闭它,也不会在其中搜索(),那么将文件指针保存到我的输出FD的末尾是不是?
是否有人知道使用cat
的这种sendfile()
实施?
不可否认,我是管理员,而不是程序员,所以请忍受我缺乏“真正的”编码知识......
答案 0 :(得分:1)
是的,输出fd的文件指针将保留在其末尾(如果文件是新的或者不大于您已经写入的数据)。
sendfile()的文档明确提及(强调我的):
在2.6.33之前的Linux内核中,
out_fd
必须引用套接字。以来 Linux 2.6.33它可以是任何文件。 如果是常规文件,那么sendfile()
会相应地更改文件偏移量。
我个人从未看到cat
的实施依赖于sendfile()
,可能是因为2.6.33是最近的,out_fd
之前不能fileno(stdout)
。 sendfile()
也不可移植,因此这样做会导致cat
的版本仅在Linux 2.6.33+上运行(尽管我猜它仍然可以作为依赖于平台的优化实现编译时间。)