gpt4 book ai didi

C++ FileIO Copy -VS- System("cp file1.x file2.x)

转载 作者:IT老高 更新时间:2023-10-28 23:12:33 42 4
gpt4 key购买 nike

编写文件复制例程会更快/更高效,还是我应该只执行对 cp 的系统调用?

(文件系统可能不同 [nfs、local、reiser 等],但它总是在 CentOS linux 系统上)

最佳答案

Invoking一个 shell通过使用 system () 函数效率不高,也不是很安全。

在 Linux 中复制文件最有效的方法是使用 sendfile () 系统调用。在 Windows 上, CopyFile () 应使用 API 函数或其相关变体之一。

Example使用 sendfile :

#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main (int argc, char* argv[])
{
int read_fd;
int write_fd;
struct stat stat_buf;
off_t offset = 0;

/* Open the input file. */
read_fd = open (argv[1], O_RDONLY);
/* Stat the input file to obtain its size. */
fstat (read_fd, &stat_buf);
/* Open the output file for writing, with the same permissions as the
source file. */
write_fd = open (argv[2], O_WRONLY | O_CREAT, stat_buf.st_mode);
/* Blast the bytes from one file to the other. */
sendfile (write_fd, read_fd, &offset, stat_buf.st_size);
/* Close up. */
close (read_fd);
close (write_fd);

return 0;
}

如果您不希望您的代码依赖于平台,您可以坚持使用更便携的解决方案 - Boost File System librarystd::fstream .

使用 Boost (more complete example) 的示例:

copy_file (source_path, destination_path, copy_option::overwrite_if_exists);

使用 C++ 的示例 std::fstream :

ifstream f1 ("input.txt", fstream::binary);
ofstream f2 ("output.txt", fstream::trunc|fstream::binary);
f2 << f1.rdbuf ();

关于C++ FileIO Copy -VS- System("cp file1.x file2.x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680730/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com