linux - 使用 mmap 复制文件

标签 linux unix networking memory-management mmap

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

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

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

最佳答案

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

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

关于linux - 使用 mmap 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033412/

相关文章:

java - 将域映射到 Tomcat 应用程序

regex - 在 Bash 中替换斜线

unix - 使用 ksh 获取最后五分钟的平均负载和正常运行时间

linux - 贝加尔湖需要特定文件夹的写入权限

java - 如何用java制作一个SSL tcp服务器?

linux - 当我在Linux系统中使用webpack别名的 "@"执行 "npm run build"

linux - 从命令行完全删除 Vagrant VirtualBox 框

networking - 是否可以重复或重新分配蓝牙信号?

unix - 如何在solaris shell中打印自unix时代以来的秒数

windows - srv.sys 如何根据底层文件系统决定原始模式与核心模式?