1
爲什麼不下面的僞代碼工作(O_DIRECT導致EFAULT)如何將mmap輸入內存寫入O_DIRECT輸出文件?
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);
我想這是一些與虛擬內核頁,以虛擬用戶頁面,在寫入調用中無法翻譯?
最好的問候,
弗里德里希
'O_DIRECT'寫入需要釘住頁面;也許這就是問題......你究竟在做什麼?如果這是一個內存映射的硬件設備,那麼最好給驅動程序添加'splice'支持...另外,請提供一個更完整的示例(包括所有系統調用的所有標誌)。理想情況下,任何人都可以編譯並運行重現。 – Nemo