2013-05-11 131 views
3

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

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

回答

5

可以使用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 */ 

但不在“chflags”手册页中。

不幸的是,我不能告诉你什么“跟踪”的确切含义,但也许这有助于 已经找到更多的信息。

+0

啊,头文件!因此,在这种情况下,“用户”看起来就是unix文件所有者(如所有者,组,所有人)。这个UF_TRACKED是超出其他stat状态的8个标志位之一,或者限制文件可能/应该被修改。我想知道这些规则是否有任何强制执行机制,或者它们只是关心看待它们的计划的咨询。我将不得不做一些实验。 – 2013-05-11 15:52:29

+1

@JerryKrinock:这些标志绝对不仅仅是咨询。例如,如果您执行“chflags uappend myfile”,则“ls> myfile”(覆盖)将失败,但“ls >> myfile”(append)有效,因此标记“仅附加”由文件系统强制执行。 – 2013-05-11 15:55:49

+0

@JerryKrinock:我能找到的唯一一个对'UF_TRACKED'的引用是http://stackoverflow.com/questions/10607877/uf-tracked-file-flag-from-stat-h。我*认为*这与OS X的“自动保存和版本”功能相关,但这只是一个猜测。 – 2013-05-11 15:57:29

7

那么即使马丁基本上回答了这个具有非常的猜测,我进入这个作为答案因为它太长了评论进入。

这里是证据...

•事实上,10.7时自动保存和版本推出,所以这就是为什么你没有看到UF_TRACKED在stat.h 10.6。

•我在运行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和监控的UF_TRACKED状态Dropbox中有0x40的文档文件。然后,我在另一台Mac上更改了该文件,以便Dropbox将其禁用到版本的守护程序,并将其推送到此Mac。结果:文件的UF_TRACKED状态从0x40更改为0x00,但这次确实是而不是在2秒后变回0x40。

•它变化为0x40 30秒后,当我恢复了修订守护它原来的名字,并重新启动。 (显然修订是通过启动KeepAlive属性启动的。)

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

因此证据是压倒性的,马丁的猜测是正确的。它是Apple的修订后台程序而不是Dropbox,它将UF_TRACKED设置为0x40。这一点的意义在于它的文档修订版正在被Lion Auto Save和Versions追踪。

+0

感谢您的调查。至少有一个人赞赏它:) – Qix 2016-04-29 07:02:32

相关问题