我正在Linux 2.6.16.46上使用此代码:

io.aio_fildes = open(name, O_CREAT | O_TRUNC | O_WRONLY | O_SYNC, 00300);

io.aio_buf = buffer;
io.aio_nbytes = size;
io.aio_sigevent = sigev;
io.aio_lio_opcode = LIO_WRITE;

aio_write( &io );

这应该使用Buffer指向IO操作的内存。不过,我看到肮脏的页面数量上升,就好像我在写信一样。这是为什么?

在构建计算机上,Open()中没有O_Direct支持。但是,由于我不使用write(),所以这仍然是问题吗?

我很确定目标上有直接的IO支持。

有帮助吗?

解决方案

弄清楚了。直接/缓冲io是一件事,同步/异步是另一回事。要使异步写入避免缓存,即使不使用write(),也需要将O_Direct送给Open()调用。

首先可能会出现编译器错误 - 仔细阅读Man 2。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top