使用mmap进行文件复制

时间:2018-04-26 01:14:17

标签: linux unix networking memory-management mmap

问题 - 当方框2请求时,动态地将大小为350 MB的文件从linux网络盒1传输到另一个Linux网络盒2。

系统内存有限,为1 GB,文件大小为350 MB,存储在磁盘上。系统实际上忙于做很多其他事情。

根据需要自动传输文件的最佳方法是什么?如果我从磁盘读取完整的文件并在传输之前将其存储在RAM中,那实际上会占用大量内存。如果我想避免这种情况,那么使用mmap传输文件会有帮助吗? mmap如何适应这种情况?

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您可以(并且应该)使用缓冲副本,如下所示:

while (read some data from the input into a buffer) {
    write data from the buffer to the output
}
and you're done

缓冲区不需要很大。大多数情况下大约64 KB的东西就足够了。

仅限发送方,您可以使用the sendfile() system call作为优化。