我使用statfs64
函数通过属性f_mntonname
从macOS上的路径获取挂载点。在基于SDK 10进行构建时,这可以正常工作。x86_64.
但是,当为arm64(和SDK 11)构建时,该方法不可用。
我可以使用statfs
作为备用,这似乎是可用的,但这对路径长度有限制。
我知道有NSFileManager
-API (attributesOfFileSystemForPath
),但不幸的是没有挂载路径的属性。
有人知道如何在新的SDK/平台上实现这一点吗?
谢谢你和问候。杜米尼克
statfs64
和fstatfs64
自macOS 10.6以来已弃用,支持"版本化符号"。
如果你在macOS 10.6或更高版本上构建,只需切换到statfs
和fstatfs
,并将此添加到源文件的顶部(在include之前):
#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位索引节点支持。