【发布时间】:2015-11-27 11:17:02
【问题描述】:
据我了解,大部分文件 IO 操作都是在内核中实现的,比如 CRUD、move 或 remove。但是,文件复制并未作为内核级 API 实现。
为了检测内核中的文件副本,需要使用启发式方法 (discussion on this approach),例如检测文件读取、文件创建和文件写入来自具有相同文件名但路径不同的同一用户。
为什么复制是用户登陆操作?
【问题讨论】:
-
99.9% 的工作实际上是由 ring 0 代码完成的。文件系统缓存、文件系统驱动程序和磁盘驱动程序做真正的工作。剩下的 0.1% 内核代码没有用,内核本身从不复制文件。并且用户确实喜欢漂亮的用户空间进度对话框以及在出现副本冲突时的选择。
-
因为文件复制不是原子操作。这是一个“读+写”操作,可以在两者之间进行数据修改。即使复制是一个单独的操作,您也会抱怨您无法跟踪被放入 ZIP 或加密的文件。
标签: windows file api filesystems kernel