C语言 最好的方式来实现缓冲到文件+卷删除通知与重新初始化

2ekbmq32  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

任务是使用文件集为几个线程附加到“最后”文件(缓冲),另一个线程顺序地阅读它认为合适的附加内容,并将读取的记录标记为已处理(解缓冲)。如果没有要解缓冲的内容,则缓冲和解缓冲都指向最后一个文件的结尾。操作相对简单和快速,因此可以使用互斥来控制竞争条件。
现在我通过打开/关闭缓冲文件来实现这一点,当需要缓冲或取消缓冲时,使用互斥锁,因此如果线程试图访问同一个文件,它永远不会并发发生-在任何给定时间只有一个文件打开。
但是我遇到了架构问题-这些文件位于可移动存储设备上,如果我删除(弹出)此设备,应用程序不会注意到它(大多数情况下,因为它访问文件相对较少),并继续将数据写入/阅读到先前被安装的存储设备遮蔽的位置-而我希望它注意到真正的文件/卷删除并执行缓冲重新初始化。
我看到的一种可能的方法是为了第一个(缓冲/追加)和第二个(取消缓冲/更新)目的打开缓冲文件,并保持FD持久化,但当这恰好是同一个文件时可能会出现问题(因此两个FD/FP指向同一个物理文件)。然而,这将导致写入删除的卷,引发错误,并将触发缓冲重新初始化。
我有一种感觉,就像我试图重新发明自行车,或者有更好的解决方案,以体积去除注意问题。
会很高兴的建议。谢谢!

**更新:**已经考虑了很多方法来解决这个问题,从通知应用程序存储热插拔事件开始(这是一种变通方法,而不是解决方案),到设计自己的数据库或文件系统结束(这将是无效的时间利用)。现在我发现我可以从fstat调用中获得dev_tinot_t,与初始化文件的原始位置进行比较。如果两者匹配-设备与以前相同,如果有什么不同-系统配置已更改,我必须重新初始化缓冲子系统。仍然必须测试,看看它是否满足需求。

xdyibdwo

xdyibdwo1#

对于实现缓冲到带有卷删除通知和重新初始化的文件:
缓冲到文件:
在写入文件之前使用缓冲区来积累数据,当缓冲区达到一定大小时刷新缓冲区。卷删除通知
定期检查文件大小。如果文件大小意外减小,则假设卷已删除。重新初始化
实现逻辑(例如,关闭并重新打开文件)以响应卷删除,从而处理重新初始化。

相关问题