【发布时间】:2012-07-01 17:01:06
【问题描述】:
我希望同时使用System.INotify 和System.IO.MMap 来监视文件修改,然后快速执行差异以通过网络发送补丁。但是,在System.IO.MMap 的文档中,有几个关于引用透明度的警告:
文档说明
只有在您知道自己是唯一用户的情况下,才可以安全地映射文件。否则,参考透明度可能会或可能不会受到损害。遗憾的是,操作系统之间的语义差异很大。
MMap 返回的值是IO ByteString,当我将这个值与putStr 一起使用时,我每次都会期待不同的结果吗?我假设作者的意思是在putStr这样的IO操作期间值可能会发生变化并崩溃?
开始编辑:想想看,我想这部分问题的答案有点明显...... 如果值在拆箱后随时发生变化,那将是有问题的。
do
v <- mappedValue :: IO ByteString
putStr v
putStr v -- Expects the same value of v everywhere
编辑结束
难道不能在映射区域或文件上获得某种锁定吗?
或者,是否可以编写一个函数copy :: IO ByteString -> IO ByteString,以安全的方式拍摄文件当前状态的快照?
【问题讨论】:
-
听起来你想要的也可以用一对简单的管道来完成。
-
我正在以某种通用的方式“查看”目录中的文件。如果有任何工具触及它们,客户端会自动更新。
-
真的没有 mmap 库提供
IO (Ptr Word8)或类似的东西吗? -
我从没想过要检查。有hackage.haskell.org/packages/archive/bindings-mmap/0.1/doc/html/…,然后是hackage.haskell.org/packages/archive/bytestring-mmap/0.2.2/doc/… 的内部部分。非常感谢。有时我仍然对 Haskell 生态系统的规模感到惊讶。
-
可能也和hackage.haskell.org/packages/archive/mmap/0.5.8/doc/html/…中使用ForeignPtr的东西一样
标签: haskell file-io io mmap virtual-memory