我有一个可以更新Web服务器上现有图像的进程,当客户端在编辑时尝试访问它们时会发生什么,404?是否等待编辑完成? (它几乎是瞬间,只有几个kb)
如果这是一种错误的做法,你有什么建议。
答案 0 :(得分:0)
在创建文件时尝试访问文件时所发生的情况的规范取决于操作系统。
在Linux上,如果您在修改文件时正在读取文件,则可以从技术上读取文件的中间状态。如果您要进行多次修改,则可以保证修改将按顺序进行,但您仍可能看到部分完成的修改。
在实践中,即使对于大型文件,您所做的也很好(因为大文件需要很长时间才能读取,因此您有时间完成保存文件的后续部分。
如果您确实想要过于安全,可以将文件复制到临时位置,删除旧文件,进行修改,然后将其复制回来。你仍然可以从技术上看到一个不完整的文件,但是即使数据从末尾丢失,也可以合理地渲染大量的文件格式(即,如果从jpeg文件的底部删除几行,图像就会丢失它的底部部分 - 它不会完全损坏。)
答案 1 :(得分:0)
实际情况取决于您的操作系统。但总的来说,我猜你会有竞争条件。您可以通过使用锁定机制(例如flock)或使用原子文件操作来避免这种情况(例如,移动到同一个FS可能在您的环境中是原子的): 您的流程会在同一个FS中的某个位置创建新文件,然后将移动到现有文件名。