【问题标题】:File Copy using mmap使用 mmap 复制文件
【发布时间】:2018-04-26 01:14:17
【问题描述】:

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

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

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

【问题讨论】:

  • 值得注意的是,除非有充分的理由使用自定义协议,否则您可能应该使用现成的包提供文件,例如 Apache 或 nginx 或 openssh(其中包括sftp 功能)已经被优化,不要试图重新发明轮子。

标签: linux unix networking memory-management mmap


【解决方案1】:

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

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作为优化。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 2021-12-17
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多