当前位置:  开发笔记 > 小程序 > 正文

内存映射大文件Haskell

如何解决《内存映射大文件Haskell》经验,为你挑选了1个好方法。

我正在尝试使用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

非常感谢.



1> Yuras..:

看起来像一个错字.如果我替换它:

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  ................

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有