询问下 v 站的大佬们一个关于操作系统获取文件大小和挂载服务器的问题!

2023-11-16 18:07:15 +08:00
 AboPlus
现在的场景如下:

​ 算法 C ++写数据到一个二进制文件中,在写完数据后也进行了 flush()操作,随后写一份 json 文件,后续算法会持续追加数据到这个二进制文件中,每次追加操作都会产生一份 json 文件用来说明本次操作已经完成。

​ 后端读取到这个 json 文件后才会去读取这个二进制文件,在第一次拿到 json 文件后,发现此时读取的文件大小为 0 ,仅有一份空的二进制文件,于是猜测是挂载服务器未及时同步

​ 挂载服务器 NFS 分别对算法输出的目录和后端识别的目录进行了挂载,推测是算法输出的文件由于一直在被追加所以未能及时同步。

​ 但是算法现在在写 json 之前通过操作系统获取了一下文件大小(之前是后端获取),结果发现目前又是可以及时同步的,所以想问问各位大佬,这可能是什么原因造成的?和操作系统获取文件大小有关吗?
667 次点击
所在节点    程序员
3 条回复
AboPlus
2023-11-16 18:17:02 +08:00
因为在算法端通过操作系统获取文件大小之前,都是未及时同步的状态,在加上了通过操作系统获取文件之后,发现能够及时同步了,所以对此表示不太理解,难道真的和通过操作系统获取文件大小有关吗?这又是什么原理呢?
AboPlus
2023-11-17 08:46:52 +08:00
大佬们有什么思路没
Raikiriww
2023-11-17 12:15:44 +08:00
我记得操作系统会对写入操作进行缓存( disk write caching )我之前在 windows 上遇到过,具体见微软官方的文章: https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/turn-disk-write-caching-on-off

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/992530

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX