C 读取64kb块中的文件

C 读取64kb块中的文件,c,file,io,C,File,Io,我想创建一个函数,将文件复制到某个位置。我想知道在64kb的块中阅读它是否有益?还是应该动态分配缓冲区?或者我应该在命令行上使用system()函数来完成它 我的意思是: int copy_file(const char *source, const char *dest) { FILE *fsource, *fdest; int readSize; unsigned char buffer[64*1024]; //64kb in size fsource =

我想创建一个函数,将文件复制到某个位置。我想知道在64kb的块中阅读它是否有益?还是应该动态分配缓冲区?或者我应该在命令行上使用system()函数来完成它

我的意思是:

int copy_file(const char *source, const char *dest)
{
    FILE *fsource, *fdest;
    int readSize;
    unsigned char buffer[64*1024]; //64kb in size

    fsource = fopen(source, "rb");
    fdest = fopen(dest, "wb");
    if(!fsource)
        return 0;
    if(!fdest)
    {
        fclose(fsource);
        return 0;
    }

    while(1)
    {
        readSize = fread(buffer, 1, sizeof(buffer), fsource);
        if(!readSize)
            break;
        fwrite(buffer, 1, readSize, fdest);
    }

    fclose(fsource);
    fclose(fdest);
    return 1;
}

最佳读取大小将非常依赖于平台。2的幂绝对是个好主意,但如果不进行测试,就很难说哪种尺寸最好


如果您想查看cp如何复制文件,可以直观地看到

,而不是命令行中的system()。它将占用发送该命令、操作以及返回原始程序的开销。请将错误检查添加到
fwrite
fclose
(至少是输出文件中的一个),否则您将得到失败的副本,这是非常糟糕的。