我似乎明白:Linux上POSIX AIO和libaio的區別?
POSIX AIO
API的原型在<aio.h>
和您鏈接與librt(-lrt)程序,而在<libaio.h>
的libaio
API和你的程序與libaio的(-laio)鏈接。
我想不通:
1.Does內核來處理的這兩種方法的不同?
2.是否必須使用O_DIRECT
這兩個標誌中的任何一個?
正如this post提到的,libaio的使用libaio
.Okay時沒有O_DIRECT
工作正常,理解,但:
根據R.Love的的Linux系統編程書,Linux支持AIO(我假設是POSIX AIO)只有如果用O_DIRECT
打開。但是我編寫的一個小程序(使用aio.h,與-lrt鏈接),在沒有O_DIRECT
標誌的情況下打開的文件上調用aio_write
可以正常工作。
感謝您的回覆。所以對於POSIX AIO來說,O_DIRECT是*不是強制性的,但是對於kerenel AIO來說,這是(確保沒有回退發生)?這似乎與本書中提到的內容相矛盾。在內核代碼中,VFS具有這些aio_read/write通過aio_read/write系統調用(它是POXIS AIO而不是內核AIO)調用函數(?)。 – itisravi 2012-01-09 01:49:42
沒有aio_ * syscalls(http://linux.die.net/man/2/syscalls)。您在vfs中看到的aio_ *函數可能是內核aio的一部分。 *用戶級別* aio_ *函數不會將1:1映射到系統調用。 – Arvid 2012-01-09 18:56:04
@Arvid請你詳細說明io_submit()阻塞的情況。 (你提到有時它可能會阻塞磁盤) – ARH 2013-03-08 21:29:36