POSIX statvfs所需的行为

时间:2014-12-26 14:04:58

标签: c filesystems posix standards

POSIX statvfs()说明:

  

可以在f_flag成员中返回以下标志:

     
      
  • ST_RDONLY - 只读文件系统。
  •   
  • ST_NOSUID - exec忽略的Setuid / setgid位。
  •   
     

未指定statvfs结构的所有成员是否在所有文件系统上都有有意义的值。

sys/statvfs.h描述:

  

<sys/statvfs.h>标头应为f_flag成员定义以下符号常量:

     
      
  • ST_RDONLY - 只读文件系统。
  •   
  • ST_NOSUID - 不支持ST_ISUID和ST_ISGID文件模式位的语义。
  •   

如何正确理解?我的意思是:

  • 是否允许POSIX兼容系统返回废话,其中ST_RDONLY是有意义的?
  • 如果statvfs结构成员对特定文件系统有意义,OS是否允许返回废话(我理解某些字段可能对像/ proc这样的合成文件系统没有意义?)

是否已知任何操作系统为用于存储数据/可执行文件的文件系统返回不正确的ST_RDONLYST_NOSUID,同时声称其statvfs()实现的POSIX兼容性?

1 个答案:

答案 0 :(得分:1)

除了存在之外,POSIX规范只需要statvfs()

特别是,它要求statvfs()用“有关文件系统的信息”填充指定的struct statvfs *缓冲区,但保证该信息的含义。换句话说,它可能是完全垃圾,实际上是在许多系统上(包括OS X上的HFS +)。

包括 f_flag struct statvfs ST_RDONLY成员,被屏蔽为ST_NOSUID和/或{{1}但许多文件系统并不存在(即使它应该是)。

如果您需要跨多个平台可靠地获取文件系统信息,您可能(具有讽刺意味)不得不求助于statfs()这样的非标准化函数。但是,在Linux上,statvfs()在大多数非合成文件系统上表现得相当不错。