カーネル 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() 呼び出しがまだ失敗するのはなぜですか?