我试图通过内核 AIO API进行AIO练习。这是一些代码:
#define _GNU_SOURCE /* syscall() not POSIX */
#define ALIGN_SIZE 4096
#define RD_WR_SIZE 1024
/* ... */
/* Make the alignment according to page size to validate open() */
posix_memalign(&buf, ALIGN_SIZE, RD_WR_SIZE);
fd = open("aio_test_file", O_RDWR | O_CREAT | O_DIRECT, 0644);
if (fd == -1) {
perror("open");
return -1;
}
/* ... */
但我的open()
电话仍然失败:
open: Invalid argument
我已经搜索了那个错误。他们中的一些人说您必须在直接 I/O 的情况下进行对齐。通过使用命令:
$ sudo dumpe2fs /dev/sda1 | grep -i "block size"
我得到的block size
是 4096。但是为什么 open() 调用仍然失败?