- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
场景如下:
运行 Linux 的中央机器是许多仪器的“数据存储”。
每台仪器都有一台 PC,每台仪器在数据存储上都有一个远程安装 (SMB),它将仪器捕获的数据文件写入其中。
仪器 PC 运行各种操作系统,包括一些非常古老的操作系统。
仪器 PC 的硬件时钟不同步,由于多种原因同步会出现问题。
各种其他修复(例如,不使用 SMB、升级仪器操作系统、开发在仪器上运行的东西)同样存在问题。
我们想要编写的是一个“抓取器”应用程序,当仪器通过其远程安装将文件写入数据存储时,它会发出通知,然后迅速将文件复制到其他地方。目前的计划是使用 Linux inotify
子系统来监视文件可能到达的目录/树上的文件系统事件,然后进行复制。
我担心的是,我们没有同步时钟这一事实将成为一个问题。这种担忧是否合理?
最佳答案
这种担心是没有道理的。
Linux inotify 是一个用户空间 API,它公开了 Linux fsnotify 子系统。这个内核文件系统连接到内核的通用文件系统层(称为 VFS)。它通过回调函数直接从文件系统代码获取创建新文件的通知,而不是通过比较目录中文件的创建或访问日期。因此,它根本不会受到文件时间戳的影响,因此不同客户端计算机上的时钟根本无关紧要。
确保您审核了 inotify_should_send_event() 发送事件函数的代码,该函数检查是否需要为跟踪的文件或目录发送事件(参见此处:http://lxr.linux.no/linux+v3.0.4/fs/notify/inotify/inotify_fsnotify.c#L144)。请注意,没有任何时间引用。本着同样的精神,内核中的主要 fsnotify 函数 (http://lxr.linux.no/linux+v3.0.4/fs/notify/fsnotify.c#L296) 不会在任何地方引用时间戳,因此时钟不会影响完全没有这个界面。
希望对您有所帮助。
关于linux - 面对不同步的时钟,inotify 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708364/
我是一名优秀的程序员,十分优秀!