代码之家  ›  专栏  ›  技术社区  ›  user177800

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

  •  4
  • user177800  · 技术社区  · 15 年前

    我希望能够在运行时确定给定文件系统的扇区大小。C代码可以接受。例如,我将数据分区格式化为32K扇区大小,其中包含大量大型视频文件。我希望能够在运行时获得这个值。

    3 回复  |  直到 12 年前
        1
  •  4
  •   tyranid    15 年前

    我想你想要 statvfs (如果“页面大小”是指扇区大小?)从我记忆中可以看出Linux和OSX的工作原理。我认为您需要使用f_bsize字段,但不幸的是,我没有Linux设备来测试ATM。

    对于Windows,您需要 GetDiskFreeSpace 功能。

        2
  •  2
  •   ennuikiller    15 年前
    #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);
    }
    
        3
  •  2
  •   Foredecker    15 年前

    在Windows上,调用 GetSystemInfo() 功能

    void WINAPI GetSystemInfo(
      __out  LPSYSTEM_INFO lpSystemInfo
    );
    

    然后访问返回的 SYSTEM_INFO 结构。这个大小保证了文件系统页面的对齐。例如,使用这个大小在非缓冲模式下读取和写入文件。

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