在我的代码中,我需要将数据从一个文件复制到另一个文件。我想出的解决方案如下所示:
const int BUF_SIZE = 1024;
char buf[BUF_SIZE];
int left_to_copy = toCopy;
while(left_to_copy > BUF_SIZE)
{
fread(buf, BUF_SIZE, 1, fin);
fwrite(buf, BUF_SIZE, 1, fout);
left_to_copy -= BUF_SIZE;
}
fread(buf, left_to_copy, 1, fin);
fwrite(buf, left_to_copy, 1, fout);
我的主要想法是可能有类似 memcpy 的东西,但用于文件中的数据。我只是给它两个文件流和字节总数。我搜索了一下,但我找不到任何这样的东西。
但是如果这样的东西不可用,我应该使用什么缓冲区大小来使传输最快?更大意味着更少的系统调用,但我认为它可能会弄乱系统上的其他缓冲或缓存。我应该动态分配缓冲区以便它只进行一对读/写调用吗?在这种特殊情况下,典型的传输大小从几 KB 到十几 MB 不等。
编辑:对于特定于操作系统的信息,我们使用的是 Linux。
编辑2:
我尝试使用 sendfile,但它没有用。它似乎写入了适量的数据,但它是垃圾。
我将上面的示例替换为如下所示:
fflush(fin);
fflush(fout);
off_t offset = ftello64(fin);
sendfile(fileno(fout), fileno(fin), &offset, toCopy);
fseeko64(fin, offset, SEEK_SET);
我添加了同花顺、offest 和一次寻找一个,因为它似乎不起作用。