Filesystems 是否在所有文件系统上顺序写入没有刷新字节的文件?
我正在写JSON文件。这意味着对于每个Filesystems 是否在所有文件系统上顺序写入没有刷新字节的文件?,filesystems,Filesystems,我正在写JSON文件。这意味着对于每个'{'字符,都有一个相应的'}',文件中的最后一个字节是'}'。写操作按顺序进行。没有fSeek。因此,如果对文件的写入被某种方式中断,我希望会有一个无效的JSON文件 现在,一个假设的文件系统可能会决定按顺序刷新我的字节。这意味着,如果在写入过程中发生断电,在刷新所有内容之前,我可以得到一个不包含我想要的数据的有效JSON。我可以使用字符串“xxx”,而不是“yyy”,或者数字末尾缺少数字 这样的文件系统存在吗?我可以相信这样一个事实:如果一个文件是有效的
'{'
字符,都有一个相应的'}'
,文件中的最后一个字节是'}'
。写操作按顺序进行。没有fSeek。因此,如果对文件的写入被某种方式中断,我希望会有一个无效的JSON文件
现在,一个假设的文件系统可能会决定按顺序刷新我的字节。这意味着,如果在写入过程中发生断电,在刷新所有内容之前,我可以得到一个不包含我想要的数据的有效JSON。我可以使用字符串“xxx”
,而不是“yyy”
,或者数字末尾缺少数字
这样的文件系统存在吗?我可以相信这样一个事实:如果一个文件是有效的,那么它就保证是完整的吗
编辑:此问题适用于缺少最后一个字节的数据无效的情况。JSON在这里是说明性的。从技术上讲,
42342
是一个有效的JSON,如果不完整,则无法对其进行验证。文件系统可能会使页面乱序的原因有几个:
- 该页包含来自2个文件的数据,另一个文件正在刷新到磁盘
- 页面在进程的工作集之外(因此不值得缓存),操作系统需要内存用于其他目的
- 文件系统是分布式的,例如OrangeFS或Andrew文件系统,并且按照非常不同的实现规则进行播放
- NFS文件系统面向一组更复杂的分布式、异构设备,其中一些写入是完全同步的,应用程序也不明智
- 块设备可以进行缓冲,直到文件系统实际需要完全刷新为止,并按照它认为合适的顺序进行刷新(因为它不知道文件的概念)
- 块设备可以分条(RAID 0),以便一个设备可以先刷新另一个设备
您是覆盖现有文件还是写入新文件?你在用哪个文件系统?我在写新文件。我还在ntfs和ext4上开发和测试该软件,但它是为一个可能在任何文件系统上运行的库设计的