如何将mmap输入内存写入O_DIRECT输出文件?

时间:2011-06-22 18:31:23

标签: linux-kernel mmap

为什么不遵循伪代码工作(O_DIRECT导致EFAULT)

in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file", O_DIRECT);
write(out_fd, in_mmap, PAGE_SIZE);

跟随吗(没有O_DIRECT)

in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file");
write(out_fd, in_mmap, PAGE_SIZE);

我猜这是虚拟内核页面到虚拟用户页面的东西,在写入调用中无法翻译?

致以最诚挚的问候,

弗里德里希

1 个答案:

答案 0 :(得分:0)

将mmap()与O_DIRECT一起使用很棘手。有一些限制。文件的输出应该是块对齐的。例如,如果将mmap()中的偏移量设置为0,则代码将起作用。您必须检查文件系统的块大小以正确设置该值。