Haskell:用于多个句柄的openFile(W + R + R + R ...),没有“文件已锁定”

时间:2018-12-30 14:49:16

标签: haskell locking

我正在处理Haskell(发布/订阅+存储)中文件支持的队列。

我的想法是拥有一个带有W + R + R + R句柄的日志文件:

  • pub:一个W手柄,用于编写/附加
  • sub:多个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 ()

File locking部分开始承诺:

  

实施应尽可能在本地实施,   Haskell进程,文件的多读取器单写程序锁定。

...但是然后说:

  

也就是说,同一文件上可能有多个句柄,   管理输入,或仅管理输出文件的一个句柄。

问题:

  • 为什么会有这种限制?
  • 如何在Haskell / GHC中使文件具有W + R + R + R处理?

0 个答案:

没有答案