使用 HFS+ 命名分叉的 API 是什么?
What are the APIs for working with HFS+ named forks?
我知道资源分支在 Mac OS X 中已弃用。
尚不清楚不太知名且很少使用的命名分叉是否也已弃用。 HFS+ 实际上支持对任何文件进行任意数量的任意长度的分叉。 (Mac 的命名分叉在概念上类似于 Windows 的备用数据流或 "ADS"。)
无论是否弃用,仍有理由学习创建、枚举、删除和其他操作文件分叉。
然而我似乎找不到任何关于使用分叉的 API 的信息。
我所能找到的是,从终端和可能接受文件名或路径的其他地方,您可以使用语法 <filename>/..namedfork/rsrc
访问资源分支,直到最近还有 <filename>/rsrc
。我尝试用其他名称替换 rsrc
但我在终端中尝试的所有命令都失败了。
我在哪里可以找到有关 API 的旧文档或非官方文档,以便以编程方式在 OS X 中使用命名分叉?
顺便说一下,在谷歌搜索这个话题时,互联网上似乎存在一个普遍的误解。随机投注者说命名分叉是建立在命名文件属性之上的。事实并非如此。命名文件属性是一个相当新的 OS X 特性。命名分叉早于 OS X。似乎命名文件属性实际上很可能在幕后使用命名分叉。
无论如何,请不要提交有关命名文件属性的答案。我正在专门寻找有关任意命名叉子的信息。
有一些命名分叉的描述in section 12.7.4. "The Attributes File"
在这上面花了好几个小时后,我相信我可以放心地得出这个结论:
- HFS+ 支持任意命名的文件分叉。
然而,- Mac API 从未包含 public API 以与除数据分叉和资源分叉之外的任何其他分叉一起工作。
抱歉,我没有具体的链接来支持我的发现。我基本上是通过查看 apple.com 和许多其他不同页面上的许多页面来构建图片的。
但特别是大多数与分叉相关的 API 都是成对存在的,其中一个用于数据分叉,另一个用于资源分叉。当 API 使用或 return 有关分叉的数据时,它是用一个只能有两个合法值的数字字段完成的,而不能是表示分叉名称的任意字符串。
旧的文件管理器可以做到这一点。不幸的是,这些文档似乎甚至不在 Apple 的 Retired Documents Library.
中
因此,您必须查看 headers,它们有很好的文档记录。参见 /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h
。在那里,您会发现,例如,FSOpenFork()
,它采用任意分支名称。但是请注意,记录它的评论说,"All volumes should support data and resource forks. Other named forks may be supported by some volumes."(强调我的。)
一旦您从 FSOpenFork()
获得了分叉参考编号,您就可以使用 FSReadFork()
从中读取,等等
我的旧答案错了!三年后,现在互联网上有更多信息,包括旧的和已弃用的 Apple 开发人员文档的镜像。
以下是我发现的命名分叉的 API 精选:
打开文件
FSOpenFork
打开文件或目录的任何分支以进行流式访问。
PBOpenForkSync
打开文件或目录的任何分支以进行流式访问。
PBOpenForkAsync
打开文件或目录的任何分支以进行流式访问。
创建和删除命名分叉
FSCreateFork
为文件或目录创建命名派生。
PBCreateForkSync
为文件或目录创建命名派生。
PBCreateForkAsync
为文件或目录创建命名派生。
FSDeleteFork
从文件或目录中删除命名的分支。
PBDeleteForkSync
从文件或目录中删除命名的分支。
PBDeleteForkAsync
删除文件或目录的命名分支
迭代命名叉
FSIterateForks
确定属于文件或目录的每个命名分支的名称和大小。
PBIterateForksSync
确定属于文件或目录的每个命名分支的名称和大小。
PBIterateForksAsync
确定属于文件或目录的每个命名分支的名称和大小
操纵文件和分叉大小
FSGetForkSize
Returns 一个叉子的大小。
PBGetForkSizeSync
Returns 一个叉子的大小。
PBGetForkSizeAsync
Returns 一个叉子的大小。
FSSetForkSize
更改打开叉子的大小。
PBSetForkSizeSync
更改打开叉子的大小。
PBSetForkSizeAsync
更改打开叉子的大小。
我知道资源分支在 Mac OS X 中已弃用。
尚不清楚不太知名且很少使用的命名分叉是否也已弃用。 HFS+ 实际上支持对任何文件进行任意数量的任意长度的分叉。 (Mac 的命名分叉在概念上类似于 Windows 的备用数据流或 "ADS"。)
无论是否弃用,仍有理由学习创建、枚举、删除和其他操作文件分叉。
然而我似乎找不到任何关于使用分叉的 API 的信息。
我所能找到的是,从终端和可能接受文件名或路径的其他地方,您可以使用语法 <filename>/..namedfork/rsrc
访问资源分支,直到最近还有 <filename>/rsrc
。我尝试用其他名称替换 rsrc
但我在终端中尝试的所有命令都失败了。
我在哪里可以找到有关 API 的旧文档或非官方文档,以便以编程方式在 OS X 中使用命名分叉?
顺便说一下,在谷歌搜索这个话题时,互联网上似乎存在一个普遍的误解。随机投注者说命名分叉是建立在命名文件属性之上的。事实并非如此。命名文件属性是一个相当新的 OS X 特性。命名分叉早于 OS X。似乎命名文件属性实际上很可能在幕后使用命名分叉。
无论如何,请不要提交有关命名文件属性的答案。我正在专门寻找有关任意命名叉子的信息。
有一些命名分叉的描述in section 12.7.4. "The Attributes File"
在这上面花了好几个小时后,我相信我可以放心地得出这个结论:
- HFS+ 支持任意命名的文件分叉。 然而,
- Mac API 从未包含 public API 以与除数据分叉和资源分叉之外的任何其他分叉一起工作。
抱歉,我没有具体的链接来支持我的发现。我基本上是通过查看 apple.com 和许多其他不同页面上的许多页面来构建图片的。
但特别是大多数与分叉相关的 API 都是成对存在的,其中一个用于数据分叉,另一个用于资源分叉。当 API 使用或 return 有关分叉的数据时,它是用一个只能有两个合法值的数字字段完成的,而不能是表示分叉名称的任意字符串。
旧的文件管理器可以做到这一点。不幸的是,这些文档似乎甚至不在 Apple 的 Retired Documents Library.
中因此,您必须查看 headers,它们有很好的文档记录。参见 /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h
。在那里,您会发现,例如,FSOpenFork()
,它采用任意分支名称。但是请注意,记录它的评论说,"All volumes should support data and resource forks. Other named forks may be supported by some volumes."(强调我的。)
一旦您从 FSOpenFork()
获得了分叉参考编号,您就可以使用 FSReadFork()
从中读取,等等
我的旧答案错了!三年后,现在互联网上有更多信息,包括旧的和已弃用的 Apple 开发人员文档的镜像。
以下是我发现的命名分叉的 API 精选:
打开文件
FSOpenFork
打开文件或目录的任何分支以进行流式访问。PBOpenForkSync
打开文件或目录的任何分支以进行流式访问。PBOpenForkAsync
打开文件或目录的任何分支以进行流式访问。
创建和删除命名分叉
FSCreateFork
为文件或目录创建命名派生。PBCreateForkSync
为文件或目录创建命名派生。PBCreateForkAsync
为文件或目录创建命名派生。FSDeleteFork
从文件或目录中删除命名的分支。PBDeleteForkSync
从文件或目录中删除命名的分支。PBDeleteForkAsync
删除文件或目录的命名分支
迭代命名叉
FSIterateForks
确定属于文件或目录的每个命名分支的名称和大小。PBIterateForksSync
确定属于文件或目录的每个命名分支的名称和大小。PBIterateForksAsync
确定属于文件或目录的每个命名分支的名称和大小
操纵文件和分叉大小
FSGetForkSize
Returns 一个叉子的大小。PBGetForkSizeSync
Returns 一个叉子的大小。PBGetForkSizeAsync
Returns 一个叉子的大小。FSSetForkSize
更改打开叉子的大小。PBSetForkSizeSync
更改打开叉子的大小。PBSetForkSizeAsync
更改打开叉子的大小。