什么是文件Mac OS X的st_flags(用户定义的标志)?

Jer*_*ock 5 macos flags dropbox stat

我试图检测Dropbox忙于在Mac OS X中更新用户Dropbox中的文件.通过在文件上运行stat(1)或stat(2),我看到用户定义的文件标志(st_flags)通常是0x40,但是当Dropbox更新文件时,它们会变为0x00几秒钟.

在我的桌面和其他文件夹中查看,我看到~95%的文件的标志值为0x00,但大约5%的文件的值为0x40.所以它可能不仅仅是Dropbox实现细节.我无法识别任何用于预测哪些文件具有0x40标志的模式.有谁知道这些值是什么意思?谁是定义它们的"用户"?

Jer*_*ock 9

好吧,尽管马丁基本上用一种非常有根据的猜测来回答这个问题,但我还是把它作为一个答案,因为它作为一个评论输入的时间太长了.

这是证据......

•实际上,10.7是引入自动保存和版本的时候,这就是为什么你在10.6中没有在stat.h中看到UF_TRACKED的原因.

•我在运行Mac OS X 10.7的Mac上尝试了我的实验,它的行为与10.8相同.

•有一个模式:一些应用程序,它检查后数似乎是那些已经采用了自动保存和版本创建的文档文件,是在1 UF_TRACKED = 0×40的人.

•另一项实验.我在Mac OS X中重命名了修订守护程序可执行文件,

/System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/Support/revisiond

然后重新启动Mac,并监视Dropbox中文件文件的UF_TRACKED状态,该文件具有0x40.然后我在另一台Mac上更改了文件,以便Dropbox将其禁用修订后台程序将其推送到此Mac .结果:文件的UF_TRACKED状态从0x40变为0x00,但这次它在2秒后没有变回0x40.

• 在将修订后台程序恢复为原始名称后30秒后,它确实更改为0x40,然后重新启动.(显然修订版是使用KeepAlive属性启动的.)

==================

因此,马丁的猜测是正确的证据是压倒性的.这是Apple的修订守护进程,而不是将UF_TRACKED设置为0x40的Dropbox.这一点的含义是Lion Auto Save和Versions正在跟踪其文档修订版.


Mar*_*n R 6

可以使用chflags命令行工具或chflags()系统调用设置标志(请参阅man 2 chflags).这些值可以在"/usr/include/sys/stat.h"中找到.

UF_TRACKED似乎有点特别.它记录在"sys/stat.h"中

#define UF_TRACKED    0x00000040 /* file renames and deletes are tracked */
Run Code Online (Sandbox Code Playgroud)

但不是在"chflags"手册页中.

不幸的是,我无法告诉你"跟踪"究竟意味着什么,但也许这有助于找到更多信息.

  • 是的,你已经搞定了,Martin。我在运行 Mac OS X 10.7 的 Mac 上尝试过它,它的行为与 Mac OS X 10.8 相同。还有一个模式:由某些应用程序创建的文档文件,可能是那些采用自动保存和版本的应用程序,是那些具有 UF_TRACKED = 0x40 的文件。 (2认同)