如何从unix / linux / osx和windows获取文件系统扇区大小?

时间:2010-01-11 22:39:24

标签: c windows linux macos unix

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

3 个答案:

答案 0 :(得分:4)

我认为你想要statvfs(如果你的页面大小,你的意思是扇区大小?),这是我记得的工作linux和OSX。我认为你需要使用f_bsize字段,但遗憾的是我没有一个linux框来测试atm。

对于Windows,您需要GetDiskFreeSpace功能。

答案 1 :(得分: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);
}

答案 2 :(得分:2)

在Windows上,调用GetSystemInfo()函数

void WINAPI GetSystemInfo(
  __out  LPSYSTEM_INFO lpSystemInfo
);

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

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