我似乎明白: 在<aio.h>中原型化POSIX AIO API,并将程序与librt(-lrt)链接起来,而<libaio.h>的libaio API和程序与libaio(-laio)链接。 我无法弄清楚的是: 1.内核是否以不同的方式处理这些方法? 2.是否必须使用O_DIRECT标志来使用它们之一? 正如在这篇文章中提到的 ,当使用libaio时,libaio可以正常工作,不需要O_DIRECT 。 根据R.Love的“ Linux系统编程”一书的说法,Linux只支持用O_DIRECT打开, 才支持常规文件上的aio (我认为是POSIX AIO)。但是我写的一个小程序(使用aio.h,与-lrt连接)没有O_DIRECT标志打开的文件上的aio_write没有问题。
网页上散布着各种各样的细节描述POSIX AIO设施的页面。 没有一个是最近的。 目前尚不清楚他们描述的究竟是什么。 例如, 这里提供的Linux内核asynchronousI / O支持的“官方” 网站上说socket不工作,但是Ubuntu 8.04.1工作站上的“aio.h”手册页似乎暗示了它适用于任意文件描述符。 然后还有另一个项目,似乎在图书馆层工作,文档更less。 我想知道: POSIX AIO的目的是什么? 鉴于我能find的一个最明显的实现例子,它不支持套接字,整个事情对我来说似乎很奇怪。 只是用于asynchronous磁盘I / O? 如果是这样,为什么超一般的API? 如果没有,为什么磁盘I / O是第一个被攻击的东西? 哪里可以find完整的 POSIX AIO程序,我可以看看? 有没有人真的使用它,真的吗? 哪些平台支持POSIX AIO? 它们支持哪些部分? 有没有人真的支持<aio.h>似乎承诺的隐含的“对任何FD的任何I / O”? 其他可用的多路复用机制是非常好的,但随机的信息碎片让我感到好奇。