macOS SDK11/ARM64:statfs64/f_mntonname

macOS SDK11 / ARM64: statfs64 / f_mntonname

我正在使用函数 statfs64 通过 属性 f_mntonname 从 macOS 上的路径获取挂载点。 这在针对架构 x86_64.

的 SDK 10.x 构建时工作正常

但是,在为 arm64(和 SDK 11)构建时,该方法不可用。

我可以使用 statfs 作为备用,这似乎可用,但这对路径长度有限制。

我知道有 NSFileManager-API (attributesOfFileSystemForPath),但不幸的是没有 属性 挂载路径。

有谁知道如何在新 SDK/Platform 上执行此操作?

谢谢你和问候, 多米尼克

statfs64fstatfs64 自 macOS 10.6 以来已弃用,取而代之的是“版本化符号”。

如果您正在为 macOS 10.6 或更高版本构建,只需切换到 statfsfstatfs,并将其添加到源文件的顶部(包含之前):

#define _DARWIN_USE_64_BIT_INODE

或者添加一个编译器标志,如果更改很多源文件太繁琐:

-D_DARWIN_USE_64_BIT_INODE

对于 arm64 目标,这已经设置,所以它没有效果。
对于 x86_64 目标,这会导致链接器发出对 _statfs$INODE64(相当于 _statfs64)而不是 _statfs.

的依赖

如果您的 x86_64 slice 确实需要支持 macOS 10.5,那么您将不得不求助于一些预处理:

#define _DARWIN_USE_64_BIT_INODE
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060
    #define STATFS statfs64
    #define FSTATFS fstatfs64
#else
    #define STATFS statfs
    #define FSTATFS fstatfs
#endif

而且,如果您需要支持 macOS 10.4 或更低版本,无论如何您都不走运,因为那里没有 64 位 inode 支持。