我正在开发一个高性能 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;
}
手册页对以下内容进行了说明st_blksize
:
st_blksize 字段给出了高效文件系统 I/O 的“首选”块大小。(以较小的块写入文件可能会导致读取-修改-重写效率低下。)
,但它没有提到st_blksize
是逻辑还是物理磁盘块大小。
那么,是st_blksize
物理磁盘块大小,如果是,那么这是检测物理磁盘块大小的最 POSIX OS 可移植方式。