日期:2014-05-16  浏览次数:20669 次

多线程下载中写文件的问题
几个线程同时写文件时,使用mmap好还是使用普通的fwrite好?
mmap写文件   要用   msync同步数据,那文件先是缓存在哪?虚拟内存?

fwrite   是在什么时候同步数据呢?只有在关闭文件时?如果这样,我想边下载边把文件存入硬盘的话   不是要频繁的打开   关闭文件?否则文件一直在缓冲区?

------解决方案--------------------
mmap不好, 因为你需要在开始下载任务时就把文件大小建立出来, 占用硬盘空间.
然后才能mmap操作, 因为mmap是不能增加文件大小的.

个人认为还是fwrite好, 比如设置缓存大小为1024kb, 当缓存满的时候同步数据, 把缓存中的内容写到文件, 文件长度自然增加, 文件指针fp自动移动.

至于打开和关闭文件, 你可以一直打开文件, 只是在写文件时加上互斥操作就行了, 写之前先更新一下文件指针位置.