私は高パフォーマンスの I/O プログラムに取り組んでおり、C++ を使用してデバイスのディスク ブロックのバイト サイズ_physical_
(ではなく) を決定する最良の方法を見つけようとしています。_logical_
これまでの調査により、次のコード スニペットにたどり着きました。
#include <iostream>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char ** argv)
{
// file information including block size of the device
struct stat info;
// device to get block size from
char * device = "/mnt/hdb1";
if (stat(device, &info))
{
printf("stat() error");
strerror(errno);
exit(1);
}
printf("Prefered block size for '%s' is %i byte\n", device, info.st_blksize);
return 0;
}
manページには、について次のように書かれていますst_blksize
。
st_blksize フィールドは、効率的なファイル システム I/O の「優先」ブロック サイズを指定します。(小さいチャンクでファイルに書き込むと、非効率的な読み取り-変更-再書き込みが発生する可能性があります。)
st_blksize
、しかし、が論理ディスクブロックサイズか物理ディスクブロックサイズかについては言及していません。
つまり、st_blksize
物理ディスクのブロック サイズです。もしそうなら、これは、物理ディスクのブロック サイズを検出する最も POSIX OS 移植性の高い方法です。