我正在开发一个高性能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操作系统的可移植方式呢?
/dev/null
的st_blksize
是什么意思。我想知道这是物理大小还是逻辑大小。 - Dan Moulding/dev/null
是一个字符设备,而不是块设备。 - Anya Shenanigansstat
中的st_mode
字段。这大概是 POSIX 所能说出字符设备和块设备之间差异的全部了。 - Anya Shenanigans