我正在Haskell(pub/sub + storage)中处理文件支持的队列.
我的想法是有一个带有W + R + R + R句柄的日志文件:
但是,打开两个句柄(R + W)到同一个文件不适用于GHC:
#!/usr/bin/env stack
-- stack --resolver lts-13.0 --install-ghc runghc
module Main where
import System.IO
main :: IO ()
main = do
let path = "file.txt"
_ <- openFile path WriteMode
_ <- openFile path ReadMode -- throws *** Exception: file.txt: openFile: resource busy (file is locked)
_ <- openFile path ReadMode
_ <- openFile path ReadMode
return ()
Run Code Online (Sandbox Code Playgroud)
文件锁定部分开始承诺:
实现应该尽可能地强制执行,至少在本地Haskell进程,多读取器单写入器锁定文件.
......然后说:
也就是说,管理输入的同一文件上可能有许多句柄,或者管理输出的文件上只有一个句柄.
问题: