如何从Unix/Linux/OSX和Windows获取文件系统扇区大小?

4

我希望能够在运行时确定给定文件系统的扇区大小。可以使用C代码。例如,我使用32k扇区大小格式化我的数据分区,其中有很多大型视频文件。我希望能够在运行时获取此值。


是的,"扇区大小"可能是更正确的术语。 - user177800
3个回答

4
我认为你需要使用 statvfs(如果你所说的pagesize是指扇区大小),据我所知它适用于Linux和OSX。我认为你需要使用f_bsize字段,但不幸的是,我目前没有Linux系统测试。

对于Windows,你需要使用GetDiskFreeSpace函数。


1
statvfs()确实是在Linux上执行此操作的一种方法(它是一个POSIX函数)。statfs()是Linux上的另一种选择,并且作为一个源自BSD的函数,它是在OSX上可用的。在这两种情况下,返回结构体的f_bsize字段是您想要的。 - caf

2
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        int page_size = getpagesize();
        printf("The page size is %d\n", page_size);
        exit(0);
}

getpagesize() 返回的是内存页面大小,而不是文件系统的。 - R Samuel Klatchko

2
在Windows平台上,调用GetSystemInfo()函数。
void WINAPI GetSystemInfo(
  __out  LPSYSTEM_INFO lpSystemInfo
);

然后在返回的SYSTEM_INFO结构中访问dwPageSize值。此大小保证提供文件系统页面对齐。例如,在非缓冲模式下读写文件时使用此大小。

如果需要卷扇区大小,只需调用GetDiskFreeSpace()函数,然后读取lpBytesPerSector值即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接