如何在 OS X 64 位应用程序中读写资源分支
How to read and write resource forks in OS X 64 bit applications
编写归档实用程序,我需要能够在 Mac OS X 文件系统上读取和写入资源分支。
曾经存在 FSOpenFork
和相关函数,但当前在线文档和 Xcode (v7.1) 中包含的文档甚至不再提及这些函数。
此外,GetEOF
等功能甚至不再适用于 64 位应用程序。
目前有哪些 API 可用于读取和写入资源分支?如果可以,请提供打开、读取、写入、关闭和inquire/set EOF 和当前r/w 偏移量的函数声明。
注意:虽然我已经添加了我自己的答案,列出了替换 FS... 函数,但如果其他人可以添加更多方法,例如使用 CFURL API 或命名的 fork 方法(使用特殊的文件名,但我一直忘记它是如何工作的)。
头文件“Files.h”列出了可用的 FS...
函数。
这里有一些替换:
SetFPos
-> FSSetForkPosition
GetEOF
-> FSGetForkSize
FSRead
-> FSReadFork
您可以通过附加 /..namedfork/rsrc
将资源分支作为常规文件打开。 (这在 <sys/paths.h>
中定义为 _PATH_RSRCFORKSPEC
。)虽然丑陋,但它确实使 shell 活动能够访问资源分支,即使没有意识到存在资源分支。示例:
ls -l myfile/..namedfork/rsrc
cp myfile/..namedfork/rsrc ...
资源分支也可作为 com.apple.ResourceFork
扩展属性使用。 (这在 <sys/xattr.h>
中定义为 XATTR_RESOURCEFORK_NAME
。)特别是,f/getxattr()
和 f/setxattr()
可以读取和写入资源分支。 _PATH_RSRCFORKSPEC
hack 实际上是由 XNU 内核根据扩展属性实现的。
编写归档实用程序,我需要能够在 Mac OS X 文件系统上读取和写入资源分支。
曾经存在 FSOpenFork
和相关函数,但当前在线文档和 Xcode (v7.1) 中包含的文档甚至不再提及这些函数。
此外,GetEOF
等功能甚至不再适用于 64 位应用程序。
目前有哪些 API 可用于读取和写入资源分支?如果可以,请提供打开、读取、写入、关闭和inquire/set EOF 和当前r/w 偏移量的函数声明。
注意:虽然我已经添加了我自己的答案,列出了替换 FS... 函数,但如果其他人可以添加更多方法,例如使用 CFURL API 或命名的 fork 方法(使用特殊的文件名,但我一直忘记它是如何工作的)。
头文件“Files.h”列出了可用的 FS...
函数。
这里有一些替换:
SetFPos
->FSSetForkPosition
GetEOF
->FSGetForkSize
FSRead
->FSReadFork
您可以通过附加 /..namedfork/rsrc
将资源分支作为常规文件打开。 (这在 <sys/paths.h>
中定义为 _PATH_RSRCFORKSPEC
。)虽然丑陋,但它确实使 shell 活动能够访问资源分支,即使没有意识到存在资源分支。示例:
ls -l myfile/..namedfork/rsrc
cp myfile/..namedfork/rsrc ...
资源分支也可作为 com.apple.ResourceFork
扩展属性使用。 (这在 <sys/xattr.h>
中定义为 XATTR_RESOURCEFORK_NAME
。)特别是,f/getxattr()
和 f/setxattr()
可以读取和写入资源分支。 _PATH_RSRCFORKSPEC
hack 实际上是由 XNU 内核根据扩展属性实现的。