我正在尝试使用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
非常感谢.
看起来像一个错字.如果我替换它:
createFile "signal.ml" size
有了这个:
createFile path size
我得到了正确的结果:
$ xxd test.dat 0000000: 0000 0000 0000 0000 0100 0000 0000 0000 ................ 0000010: 0200 0000 0000 0000 0300 0000 0000 0000 ................ 0000020: 0400 0000 0000 0000 0500 0000 0000 0000 ................ 0000030: 0600 0000 0000 0000 0700 0000 0000 0000 ................ 0000040: 0800 0000 0000 0000 0900 0000 0000 0000 ................