使用HFS +命名分支的API有哪些?

时间:2016-06-09 13:39:15

标签: macos hfs+ alternate-data-stream

我知道在Mac OS X中不推荐使用资源分支。

目前尚不清楚不太知名和少用的命名叉是否也被弃用。 HFS +实际上支持任意文件的任意数量的任意长度分叉。 (Mac的命名分支在概念上类似于Windows的备用数据流或“ADS”。)

已弃用或尚未弃用仍有理由学习创建,枚举,删除和操作文件叉。

然而,我似乎无法找到有关使用forks的API的任何信息。

我可以找到的是,从终端和可能接受文件名或路径的其他地方,您可以使用语法<filename>/..namedfork/rsrc访问资源分支,直到最近还<filename>/rsrc。我尝试用其他名称替换rsrc,但我在终端尝试的所有命令都失败了。

在哪里可以找到关于API的旧的或非官方的文档,以编程方式在OS X中使用命名的forks?

顺便说一下,谷歌搜索这个话题时,互联网上似乎存在一个常见的误解。随机投注者说,命名分支是建立在命名文件属性上的。事实并非如此。命名文件属性是一个相当新的OS X功能。命名分支早于OS X.事实上,命名文件属性似乎可以在幕后使用命名分支。

在任何情况下,请不要提交有关命名文件属性的答案。我特意寻找有关任意命名叉的信息。

3 个答案:

答案 0 :(得分:3)

旧的文件管理器能够做到这一点。不幸的是,这些文档似乎甚至不在Apple的Retired Documents Library中。

因此,您必须查看标题,这些标题非常详细。见/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h。在那里,你会发现,例如FSOpenFork(),它采用任意的叉名。但是请注意,记录它的评论说,&#34;所有卷都应该支持数据和资源分支。 某些卷支持可能的其他命名分支。&#34; (强调我的。)

FSOpenFork()获得分叉参考号后,您可以使用FSReadFork()从中读取,等等。

答案 1 :(得分:1)

花了几个小时后,我相信我可以安全地得出这个结论:

  • HFS +支持任意命名的文件分支。
  • 然而,Mac API从未包含公共API来处理除数据分叉和资源分叉之外的任何其他分支。

抱歉,我没有特定的链接来支持我的发现。我基本上通过查看apple.com和许多其他不同页面上的许多页面来构建图片。

但是特别是与叉子相关的大多数API成对存在,其中一个用于数据叉,另一个用于资源叉。当API使用或返回有关forks的数据时,它使用一个只能有两个合法值的数字字段,而不是一个代表fork名称的任意字符串。

答案 2 :(得分:1)

我的旧答案是错误的!三年后,互联网上现在有了更多信息,包括旧的和过时的Apple开发人员文档的镜像。

以下是我发现的命名叉的API的选择:

打开文件

  • FSOpenFork打开文件或目录的任何分支以进行流访问。
  • PBOpenForkSync打开文件或目录的任何分支以进行流访问。
  • PBOpenForkAsync打开文件或目录的任何分支以进行流访问。

创建和删除命名叉

  • FSCreateFork为文件或目录创建一个命名派生。
  • PBCreateForkSync为文件或目录创建一个命名派生。
  • PBCreateForkAsync为文件或目录创建一个命名派生。
  • FSDeleteFork从文件或目录中删除命名的派生。
  • PBDeleteForkSync从文件或目录中删除命名的派生。
  • PBDeleteForkAsync删除文件或目录的命名分支

遍历命名叉

  • FSIterateForks确定属于文件或目录的每个命名fork的名称和大小。
  • PBIterateForksSync确定属于文件或目录的每个命名fork的名称和大小。
  • PBIterateForksAsync确定属于文件或目录的每个命名fork的名称和大小

操纵文件和叉子的大小

  • FSGetForkSize返回打开的分叉的大小。
  • PBGetForkSizeSync返回打开的分叉的大小。
  • PBGetForkSizeAsync返回打开的分叉的大小。
  • FSSetForkSize更改打开的叉子的大小。
  • PBSetForkSizeSync更改打开的叉子的大小。
  • PBSetForkSizeAsync更改打开的叉子的大小。

Core Services Framework Reference