微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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/平台上做到这一点?

谢谢和问候, 多米尼克

解决方法

statfs64fstatfs64 自 macOS 10.6 起已被弃用,以支持“版本化符号”。

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

#define _DARWIN_USE_64_BIT_INODE

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

-D_DARWIN_USE_64_BIT_INODE

对于 arm64 目标,这个已经设置好了,所以没有作用。
对于 x86_64 目标,这会导致链接器发出对 _statfs$INODE64(相当于 _statfs64)而不是 _statfs 的依赖。

如果您的 x86_64 切片确实需要支持 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 支持。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。