【发布时间】:2014-03-18 17:18:07
【问题描述】:
我正在尝试使用 Haskell mmap 包,而且我对 Haskell 还很陌生,所以我试图通过编写一个小程序来开始,将少量数据写入内存映射文件。
这段代码正确地创建了文件大小,但似乎没有将数据从向量刷新到内存映射文件;我使用 hexdump 验证了这一点 - 都是 0。
出了什么问题?
import Control.Monad
import Data.Vector.Storable
import Foreign.Marshal.Array
import System.Directory
import System.IO
import System.IO.MMap
createFile :: FilePath -> Integer -> IO ()
createFile path size = do
h <- openBinaryFile path WriteMode
hSetFileSize h size
n = 10
size = 10 * 8
path = "test.dat" :: FilePath
main :: IO ()
main = do
createFile "signal.ml" size
let v = generate n (\i -> i) :: Vector Int
putStrLn $ show v
(ptr, s, _, _) <- mmapFilePtr path ReadWrite Nothing
unsafeWith v (\srcPtr -> copyArray ptr srcPtr n)
munmapFilePtr ptr s
非常感谢。
【问题讨论】:
-
System.IO.MMap手册说,如果发生更改,“一段时间后将写入磁盘。发生这种情况时未指定”,如果可以强制执行,这是一个很好的问题...
标签: haskell