gpt4 book ai didi

linux - ntfs 但不是 ext3 的数据完整性问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:11 24 4
gpt4 key购买 nike

在我的应用程序中,我不断地将数据写入 file1 并将其刷新到设备。在另一个线程中,我正在从 file1 读取数据并将其写入 file2

每次我对 file1 执行 fwrite + fflush 时,我都会向另一个线程发出信号以开始读取它。另一个线程从 file1 读取数据并将其转储到 file2。很简单的逻辑。此外,每隔几分钟,我就会返回 file1 的开头并开始覆盖旧数据。

现在我的问题是,一旦我开始覆盖 file1 中的数据,读入 file2 的数据有时甚至是旧数据(即在前一次迭代中写入的数据)尽管编写器线程已发出信号表明它写入了新数据(并刷新了它)。

我正在 [C + linux + arm platfrom] 上写入和读取固态驱动器(128 GB SAMSUNG 470 系列,如果有帮助的话)。我觉得处理器缓存有问题。也许写入 进入缓存,而读取器线程的读取 来自闪存,因此是陈旧数据。

这里的问题是,如果 SSD 格式化为 NTFS,则会出现此问题。如果我用 ext3 格式化它,问题就消失了。不幸的是,NTFS 是一个硬性要求。另一个有趣的观察是,如果我有两个读取器线程,它们都会在不同的时刻获取过时数据。

禁用 SSD 写缓存后的事件(使用 hdparm -W0/dev/sda1),我在 NTFS 上遇到了同样的问题。一个多星期以来,我一直对此深感困惑。

知道发生了什么,为什么会这样?

任何帮助都是物有所值的...

编辑 事实证明,NTFS 驱动程序不喜欢我通过倒带文件指针来覆盖文件。这是众所周知的事吗?

最佳答案

好的,所以我自己发现了问题(这种情况很少发生!!!)。

我发现 C 库缓冲 (fread/fwrite) 有问题。所以我在每次 fread() 之前执行 fflush()。这解决了我的问题(我不知道驱动程序究竟出了什么问题,但我假设从文件的同一位置读取时,C 库 I/O 函数的“读取”缓冲存在一些问题第二次)。

感谢@Asad Rasheed 和@jrtipton 的输入:)

关于linux - ntfs 但不是 ext3 的数据完整性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com