多线程下载中写文件的问题
几个线程同时写文件时,使用mmap好还是使用普通的fwrite好?
mmap写文件 要用 msync同步数据,那文件先是缓存在哪?虚拟内存?
fwrite 是在什么时候同步数据呢?只有在关闭文件时?如果这样,我想边下载边把文件存入硬盘的话 不是要频繁的打开 关闭文件?否则文件一直在缓冲区?
------解决方案--------------------mmap不好, 因为你需要在开始下载任务时就把文件大小建立出来, 占用硬盘空间.
然后才能mmap操作, 因为mmap是不能增加文件大小的.
个人认为还是fwrite好, 比如设置缓存大小为1024kb, 当缓存满的时候同步数据, 把缓存中的内容写到文件, 文件长度自然增加, 文件指针fp自动移动.
至于打开和关闭文件, 你可以一直打开文件, 只是在写文件时加上互斥操作就行了, 写之前先更新一下文件指针位置.